int foo_bar; // OK
int FooBar; // OK
int foo bar; // ошибка: пробел не может использоваться
// в идентификаторе
int foo$bar; // ошибка: символ $ не может использоваться
// в идентификаторе
Идентификаторы, начинающиеся со знака подчеркивания или содержащие двойной символ подчеркивания, резервируются для использования компилятором; не используйте их. Рассмотрим пример.
int _foo; // не рекомендуем
int foo_bar; // OK
int foo__bar; // не рекомендуем
int foo_; // OK
A.3.1. Указательные литералы
A.4. Область видимости, класс памяти и время жизни
Каждое имя в языке C++ (за исключением имен препроцессора; см. раздел A.17) имеет определенную
A.4.1. Область видимости
Существует пять видов областей видимости (см. раздел 8.4).
•
•
•
•
• ...
) инструкции for
, while
, switch
или if
.
Область видимости переменной распространяется (исключительно) до конца инструкции, в которой она объявлена. Рассмотрим пример.
for (int i = 0; i
// переменная i может быть использована здесь
}
if (i < 27) // переменная i из инструкции for вышла из области
// видимости
Области видимости класса и пространства имен имеют свои имена, поэтому можем ссылаться на их членов извне. Рассмотрим пример.
void f; // в глобальной области видимости
namespace N {
void f // в пространстве области видимости N
{
int v; // в локальной области видимости
::f; // вызов глобальной функции f
}
}
void f
{
N::f; // вызов функции f(x) из области видимости N
}
Что произойдет, если мы вызовем функции N::f
или ::f
? См. раздел A.15.
A.4.2. Класс памяти
Существуют три
• static
. Автоматическая память выделяется, когда функция вызывается, и освобождается при возвращении управления в вызывающий модуль. Таким образом, если функция (явно или неявно) вызывает сама себя, может существовать несколько копий автоматических данных: по одной копии на каждый вызов (см. раздел 8.5.8).
• static
в функциях и классах. Редактор связей выделяет статическую память до запуска программы.