logo search
volkov / C++ / Бьерн Страуструп-Справочное руководство по С++

R.5.1 Первичные выражения

Первичными выражениями являются литералы, имена и имена, определенные

с помощью операции разрешения области видимости ::.

первичное-выражение:

литерал

this

:: идентификатор

:: имя-функции-операции

:: уточненное-имя

( выражение )

имя

Литерал является первичным выражением. Его тип определяется

его видом ($$R.2.5).

В теле нестатической функции-члене ($$R.9.3) служебное слово

this обозначает указатель на объект, к которому относится вызов

функции. Служебное слово this нельзя использовать вне тела

функции-члена класса.

Операция :: , за которой следует идентификатор или

имя-операции-функции или уточненное-имя являются первичным

выражением. Его тип задается описанием идентификатора, имени

или имени-функции-операции. Результатом является идентификатор,

имя или имя-функции-операции. Результат является адресом, если

идентификатор является адресом. Идентификатор или имя-функции-операции

должны иметь файловую область видимости. С помощью операции ::

можно обращаться к типу, объекту, функции или элементу перечисления,

даже если обозначающий их идентификатор является скрытым ($$R.3.2).

Выражение в скобках является первичным выражением, тип и значение

которого идентичны им же у выражения без скобок. Наличие скобок

не влияет на то, является выражение адресом или нет.

Понятие имя - это определенное первичное-выражение, которое

может появляться только после . и -> ($$R.5.2.4):

имя:

идентификатор

имя-функции-операции

имя-функции-преобразования

~имя-класса

уточненное-имя

Идентификатор есть имя, при условии что он описан надлежащим образом

($$R.7). Понятие имя-функции-операции описано в ($$R.13.4), а

понятие имя-функции-преобразования в ($$R.12.3.2). Конструкция

~имя-класса обозначает деструктор ($$R.12.4).

уточненное-имя:

уточняющее-имя-класса :: имя

Понятие уточняющее-имя-класса, за которым следует :: и имя члена

этого класса ($$R.9.2), или члена базового по отношению к данному

класса ($$R.10) является уточненное-имя. Его тип есть

тип члена, а результат выражения есть этот член. Результат является

адресом, если таковым является член. Имя класса может быть скрыто

другим именем (не типа), в таком случае все равно имя класса

доступно и его можно использовать. Если используется

имя-класса::имя-класса или имя-класса::~имя-класса, оба понятия

имя-класса должны обозначать один и тот же класс. С помощью такой

записи обозначаются конструкторы ($$R.12.1) и деструкторы ($$R.12.4)

соответственно. Можно использовать уточняющие имена

неоднократно, например, N1::N2::N3::n, чтобы обозначать вложенные

типы ($$R.9.7).