Поделиться через


Имена и полные имена

Имена, используемые с бинарным оператором разрешения области действия (::), называются полными. Имя, указанное после такого оператора, должно быть членом класса, заданного слева от оператора, или членом его базового класса (классов).

Имена, указанные после оператора выбора члена (. или –>), должны быть членами типа класса объекта, заданного слева от оператора, или членами его базового класса (классов). Имена, указанные справа от оператора выбора члена (–>), также могут быть объектами другого типа класса при условии, что левая часть оператора –> является объектом класса и этот класс определяет перегруженный оператор выбора члена (–>), вычисляющий значение указателя на некоторый другой тип класса. (Это условие рассматривается более подробно в разделе Доступ к члену класса).

Компилятор осуществляет поиск имен в указанном ниже порядке. При обнаружении искомого имени поиск останавливается.

  1. Поиск в текущей области видимости блока, если имя используется внутри функции; в противном случае поиск выполняется в глобальной области.

  2. Поиск за пределами каждой включающей области видимости блока, в том числе во внешней области видимости функции (которая содержит аргументы функции).

  3. Если имя используется в функции-члене, оно ищется в области видимости класса.

  4. Поиск имени выполняется в базовых классах класса.

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

  6. Поиск в глобальной области.

В этот порядок поиска можно внести изменения следующим образом.

  1. Если именам предшествует оператор ::, поиск начинается в глобальной области.

  2. Если именам предшествуют ключевые слова class, struct и union, компилятор выполняет поиск только имен class, struct и union.

  3. Слева от оператора разрешения области действия (::) можно использовать только имена class, struct, namespace и union.

Если имя относится к нестатическому члену, но используется в статической функции-члене, выдается сообщение об ошибке. Аналогично, если имя относится к любому нестатическому члену во включающем классе, выдается сообщение об ошибке, поскольку включенные классы не имеют указателей this включающих классов.

См. также

Ссылки

Общие сведения о правилах области