Что означает объем функций?
что означает область функций?
Я понимаю область переменных. Когда мы говорим о области функций, это относится к функциям внутри структур (классов) или есть область для нормальных функций, которые мы вызываем в main()
программы на C / C++?
4 ответов
функции могут иметь глобальную, пространство имен, класс (обычно называемые членами в этом случае) или локальную (в другой функции) область. Они также могут быть static
предоставление им внутренней связи или в анонимном пространстве имен, делая их недоступными за пределами единицы перевода (при этом все еще имея внешнюю связь, чтобы их можно было использовать в качестве параметров шаблона).
грубо говоря, a объем - область, в которой могут быть объявлены имена. Имена, объявленные в области, доступны в этой области, а в некоторых случаях и извне.
(чтобы быть педантически точным, это на самом деле декларация области и объем имя-это часть программы, в которой имя является допустимым. Он начинается там, где он объявлен, и включает в себя остальную часть этого региона, а иногда и некоторые другие регионы.)
области вводятся пространствами имен, классами и составными операторами (то есть блоками операторов кода, окруженными {}
). Последний включает в себя органы функций.
большинство объектов и функций имеют имена, и каждое из этих имен находится внутри области.
таким образом," область функции " может означать две вещи: либо область, определенную телом функции, в которой объявлены ее локальные переменные; или область (либо класс, либо namespace), в котором объявляется имя функции.
UPDATE: вы говорите, что имеете в виду область имени функции. Это всегда начинается сразу после объявления; где это заканчивается, зависит от того, где это объявление было.
- если он объявлен внутри пространства имен, он длится до тех пор, пока это пространство имен не будет закрыто. Если пространство имен будет открыто позже в той же единице перевода, оно вернется в область.
- если он объявлен внутри класса определение функции-члена, то объем держится до конца определения класса. Он также находится в области внутри определений любых производных классов, а также внутри определений члена этого класса или производных классов.
- если он объявлен внутри определения класса как друг или внутри определения функции, то имя фактически объявлено в окружающем пространстве имен, и область совпадает с этим случаем.
да, функции также имеют область, хотя их область обычно больше, чем у большинства переменных.
в C [edit: который был одним из тегов, когда я писал это], функции имеют либо глобальную область, либо область файла. Глобальная область применяется к нормальной функции, которая видна во всей программе. Область файла применяется к функции, которую вы отметили как "статическую", поэтому она отображается только в той же единице перевода.
C++ использует несколько различных имен для те, но имеет те же Основные понятия. Он добавляет пространства имен в виде вещей, фактически называемых "пространством имен" и struct
s/class
es. За одним исключением функция в пространстве имен отображается только в этом пространстве имен. Исключение составляет, если вы определяете внутри class
/struct
:
class X {
friend void whatever(X const &) { do_something(); }
};
в этом случае, даже если функция определена внутри X
, его имя вводится в окружающее пространство имен, поэтому оно видно за пределами X.