"Мюррэй Хилл, Бьярн Страустрап. Язык С++" - читать интересную книгу автора


Для типов, функций и костант "значение" неизменно; для
неконстантных типов данных начальное значение может впоследствие
изменяться:

int count = 1;
char* name = "Bjarne";
//...
count = 2;
name = "Marian";

Из всех определений только
char ch;
не задает значение. Всякое описание, задающее значение, является
определением.

2.1.1 Область Видимости

Описание вводит имя в области видимости; то есть, имя может
использоваться только в определенной части программы. Для имени,
описанного в функции (такое имя часто называют локальным), эта
область видимости простирается от точки описания до конца блока, в
котором появилось описание; для имени не в функции и не в классе
(называемого часто глобальным именем) область видимости
простирается от точки описания до конца файла, в котором появилось
описание. Описание имени в блоке может скрывать (прятать) описание
во внутреннем блоке или глобальное имя. Это значит, что можно

- стр 49 -

переопределять имя внутри блока для ссылки на другой объект. После
выхода из блока имя вновь обретает свое прежнее значение. Например:

int x; // глобальное x

f() {
int x; // локальное x прячет глобальное x
x = 1; // присвоить локальному x
{
int x; // прячет первое локальное x
x = 2; // присвоить второму локальному x
}
x = 3; // присвоить первому локальному x
}

int* p = &x; // взять адрес глобального x

Скрытие имен неизбежно при написании больших программ. Однако
читающий человек легко может не заметить, что имя скрыто, и
некоторые ошибки, возникающие вследствие этого, очень трудно