Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Справочник по С++.doc
Скачиваний:
49
Добавлен:
02.05.2014
Размер:
995.33 Кб
Скачать

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

R.5.2 Постфиксные выражения

Постфиксные выражения применяются слева направо. постфиксное-выражение: первичное-выражение постфиксное-выражение [ выражение ] постфиксное-выражение ( список-выражений opt ) имя-простого-типа ( список-выражений opt ) постфиксное-выражение . имя постфиксное-выражение -> имя постфиксное-выражение ++ постфиксное-выражение -- список-выражений: выражение-присваивания список-выражений , выражение-присваивания

R.5.2.1 Индексация

Постфиксное выражение, за которым следует выражение в квадратных скобках, является постфиксным выражением. Интуитивный смысл его индексирование. Первое из выражений должно иметь тип "указатель на T", а второе быть целочисленного типа. Тип результата есть "T". Выражение E1[E2] совпадает (по определению) с выражением *((E1) + (E2)). Подробности операций * и + даны в $$R.5.3 и $$R.5.7, а массивы обсуждаются в $$R.8.2.4.