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

обнаружить, главным образом потому, что они редкие. Значит скрытие
имен следует минимизировать. Использование для глобальных
переменных имен вроде 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)
{