Читать «Справочное руководство по C++» онлайн - страница 14

Бьярн Страустрап

Если выражение имеет тип "ссылка на T" (§R.8.2.2, §R.8.4.3), значение выражение есть объект типа "T", на который настроена ссылка. Выражение является адресом. Ссылку можно представлять как имя объекта.

Допустимы определенные пользователем преобразования объектов класса в (и обратно) основные типы, указатели и т.д. (§R.12.3) Если они недвусмысленны (§R.13.2), такие преобразования могут применяться транслятором всегда, когда появляется объект типа класса в качестве операнда операции, в качестве инициализирующего выражения (§R.8.4), в качестве выражения, задающего условие (§R.6.4), или в качестве выражения, используемого в операторе цикла (§R.6.5), или в качестве значения, возвращаемого функцией (§R.6.6.3), или в качестве параметра функции (§R.5.2.2).

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).