Чтение онлайн

на главную - закладки

Жанры

Справочное руководство по 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).

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.

R.5.2.2 Вызов функции

Вызов функции является постфиксным выражением, за которым следует, возможно пустой, список выражений в скобках, разделенных запятой. Эти выражения образуют фактические параметры функции. Постфиксное выражение должно иметь тип "функция, возвращающая T", "указатель на функцию, возвращающую T" или "ссылка на функцию, возвращающую T", а результат операции вызова имеет тип "T".

При вызове функции происходит инициализация каждого формального параметра (§R.8.4.3, §R.12.8, $$r.12.1) фактическим параметром. Производятся стандартные (§R.4) и заданные пользователем (§R.12.3) преобразования типа. В функции может изменяться значения непостоянных формальных параметров, но эти изменения не могут повлиять на значения фактических параметров, кроме того случая, когда формальный параметр имеет тип ссылки без спецификации const (§R.8.2.2). Если формальный параметр имеет тип ссылки при необходимости может создаваться временная переменная (§R.7.1.6, §R.2.5,§R.2.5.4,§R.8.2.4, §R.12.2). Добавим, что возможно изменение непостоянных объектов с помощью параметров-указателей.

Функцию можно описать таким образом, что она сможет использовать меньшее число параметров (определив параметры по умолчанию §R.8.2.6) или большее число параметров (с помощью эллипсиса … §R.8.2.5), чем было указано при определении функции (§R.8.3).

Функцию можно вызвать только, если описание ее доступно в той области видимости, где происходит вызов. Отсюда следует, всякий формальный параметр, соответствующий некоторому фактическому параметру, должен быть доступен, если не считать эллипсис (…).

Перед вызовом всякий фактический параметр типа float, для которого нет формального параметра, преобразуется к типу double, а типа char, short, перечисления или битовое поле, для которого нет формального параметра, преобразуется к типу int или unsigned согласно стандартным преобразованиям целочисленных (§R.4.1). Объект, являющийся классом и не имеющий описания формального параметра, передается при вызове как структура данных.

Объект, являющийся классом и имеющий описание формального параметра передается с помощью инициализации формального параметра фактическим параметром, которая происходит перед выполнением функции посредством вызова конструктора (§R.12.2, §R.12.8).

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

Допустимы рекурсивные вызовы.

Операция вызова функции порождает адрес только, если тип результата есть адрес.

R.5.2.3 Явные преобразования типа

Поделиться:
Популярные книги

Наследник Четырех

Вяч Павел
5. Игра топа
Фантастика:
героическая фантастика
рпг
6.75
рейтинг книги
Наследник Четырех

Адъютант

Демиров Леонид
2. Мания крафта
Фантастика:
фэнтези
6.43
рейтинг книги
Адъютант

Возвышение Меркурия. Книга 7

Кронос Александр
7. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 7

Приручитель женщин-монстров. Том 1

Дорничев Дмитрий
1. Покемоны? Какие покемоны?
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Приручитель женщин-монстров. Том 1

Лорд Системы 4

Токсик Саша
4. Лорд Системы
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Лорд Системы 4

Возвышение Меркурия. Книга 2

Кронос Александр
2. Меркурий
Фантастика:
фэнтези
5.00
рейтинг книги
Возвышение Меркурия. Книга 2

Прометей: каменный век II

Рави Ивар
2. Прометей
Фантастика:
альтернативная история
7.40
рейтинг книги
Прометей: каменный век II

На границе империй. Том 10. Часть 3

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 3

6 Секретов мисс Недотроги

Суббота Светлана
2. Мисс Недотрога
Любовные романы:
любовно-фантастические романы
эро литература
7.34
рейтинг книги
6 Секретов мисс Недотроги

Неудержимый. Книга XIII

Боярский Андрей
13. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XIII

Вернуть невесту. Ловушка для попаданки

Ардова Алиса
1. Вернуть невесту
Любовные романы:
любовно-фантастические романы
8.49
рейтинг книги
Вернуть невесту. Ловушка для попаданки

На руинах Мальрока

Каменистый Артем
2. Девятый
Фантастика:
боевая фантастика
9.02
рейтинг книги
На руинах Мальрока

Найди меня Шерхан

Тоцка Тала
3. Ямпольские-Демидовы
Любовные романы:
современные любовные романы
короткие любовные романы
7.70
рейтинг книги
Найди меня Шерхан

Табу на вожделение. Мечта профессора

Сладкова Людмила Викторовна
4. Яд первой любви
Любовные романы:
современные любовные романы
5.58
рейтинг книги
Табу на вожделение. Мечта профессора