Существует четыре области видимости: локальная, функция, файл и класс. Локальная: Имя, описанное в блоке ($$R.6.3), является локальным в этом блоке и может использоваться только в нем и в блоках, содержащихся в этом блоке и появляющихся после момента описания. Имена формальных параметров рассматриваются, как если бы они были описаны в самом объемлющем блоке этой функции. Функция: Метки ($$R.6.1) можно использовать повсюду в функции, в которой они описаны. Только метки имеют область видимости, совпадающую с функцией. Файл: Имя описанное вне всех блоков ($$R.6.3) и классов ($$R.9) имеет область видимости файл и может быть использовано в единице трансляции, в которой оно появляется после момента описания. Имена, описанные с файловой областью видимости, называются глобальными. Класс: Имя члена класса является локальным в своем классе и оно может быть использовано только в функции-члене этого класса ($$R.9.3), или после операции., применяемой к объекту данного класса ($$R.5.2.4) или объекту производного класса($$R.10), или после операции ->, применяемой к указателю на объект данного класса ($$R.5.2.4) или на объект производного класса, или после операции разрешения:: ($$R.5.1), примененной к имени данного или производного класса. Имя, введенное с помощью операции friend ($$R.11.4), принадлежит той же области определенности, что и класс, содержащий описание friend. Класс, впервые описанный в операторе return или в типе параметра, принадлежит к глобальной области видимости.Специальные соглашения действуют на имена, введенные при описаниипараметров функции ($$R.8.2.5) и в описаниях friend ($$R.11.4). Имя может быть скрыто явным описанием того же имени в объемлющемблоке или классе. Скрытое имя члена класса все-таки можноиспользовать, если оно предваряется именем класса, к которомуприменена операция:: ($$R.4.1, $$R.9.4, $$R.10). Скрытое имя объекта,функции, типа или элемента перечисления с файловой областью видимостиможно использовать, если оно предваряется унарной операцией::($$R.5.1). В дополнении к этому, имя класса ($$R.9.1) может бытьскрыто именем объекта, функции или элемента перечисления, имеющеготу же область видимости. Если класс и объект, или функция, илиэлемент перечисления описаны (в любом порядке) с одинаковым именемв одной области видимости, то имя класса становится скрытым. Имякласса, скрытое в локальной области видимости или в областивидимости класса именем объекта, функции или элемента перечисления,все-таки можно использовать, если предварить его подходящейспецификацией class, struct или union ($$R.7.1.6). Аналогично,скрытое имя элемента перечисления можно использовать, еслипредварить его спецификацией типа enum ($$R.7.1.6). В $$R.10.4приводится сводка правил области видимости.Моментом описания имени считается момент завершения описателя имени($$R.8), предшествующей части инициализации (если она есть).Например, int x = 12; { int x = x; } Здесь второе x инициализируется своим собственным (неопределенным)значением. Моментом описания элемента перечисления считается момент сразупосле появления его идентификатора, например: enum { x = x }; Здесь элемент перечисления x опять инициализируется своим собственным(неопределенным) значением.