"Мюррэй Хилл, Бьярн Страустрап. Язык С++" - читать интересную книгу автораобнаружить, главным образом потому, что они редкие. Значит скрытие
имен следует минимизировать. Использование для глобальных переменных имен вроде i или x напрашивается на неприятности. С помощью применения операции разрешения области видимости :: можно использовать скрытое глобальное имя. Например: int x; f() { int x = 1; // скрывает глобальное x ::x = 2; // присваивает глобальному x } Но возможности использовать скрытое локальное имя нет. Область видимости имени начинается в точке описания. Это означает, что имя можно использовать даже для задания его собственного значения. Например: int x; f() { int x = x; // извращение } Это не является недопустимым, хотя и бессмысленно, и компилятор предупредит, что x "used before set" ("использовано до того, как задано"), если вы попробуете так сделать. Можно, напротив, не применяя операцию ::, использовать одно имя для ссылки на два различных объекта в блоке. Например: - стр 50 - int x; f() // извращение { int y = x; // глобальное x int x = 22; y = x; // локальное x } Переменная y инициализируется значением глобального x, 11, а затем ему присваивается значение локальной переменной x, 22. Имена параметров функции считаются описанными в самом внешнем блоке функции, поэтому f(int x) { |
|
|