C++   ::   Хилл Мюррей

Страница: 58 из 357

Например:

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

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

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

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

очень трудно обнаружить, главным образом потому, что они редкие. Значит сокрытие имен следует минимизировать. Использование для глобальных переменных имен вроде i или x напрашиваемся на неприятности.

С помощью применения операции разрешения области видимости :: можно использовать скрытое глобальное имя. Например:

int x;

f() (* int x = 1; // скрывает глобальное x ::x = 2; // присваивает глобальному x *)

Но возможности использовать скрытое локальное имя нет.

Область видимости имени начинается в точке описания. Это означает, что имя можно использовать даже для задания его собственного значения. Например:

int x;

f() (* int x = x; // извращение *)

Это не является недопустимым, хотя и бессмысленно, и компилятор предупредит, что x «used before set» («использовано до того, как задано»), если вы попробуете так сделать. Можно, напротив, не применяя операцию ::, использовать одно имя для ссылки на два различных объекта в блоке. Например:

int x;

f() // извращение (* int y = x; // глобальное x int x = 22; y = x; // локальное x *)

Переменная y инициализируется значением глобального x, 11, а затем ему присваивается значение локальной переменно�

|< Пред. 56 57 58 59 60 След. >|

Java книги

Контакты: [email protected]