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

на главную

Жанры

Справочное руководство по C++

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

Шрифт:

Указатель на член класса B можно присваивать указателю на член того же типа класса D при условии, что D является прямым или непрямым производным класса B, и однозначно описан как производный в части public (§R.10.1.1).

Присваивание объекту типа "ссылка на T" сводится к присваиванию объекту типа T, который обозначается ссылкой.

Выполнение выражение вида E1 op= E2 эквивалентно выполнению E1 = E1 op (E2), однако E1 вычисляется лишь один раз. В операциях += и -= левый операнд может быть указателем, в этом случае правый (целочисленный) операнд преобразуется так, как объяснялось в §R.5.7. Все правые операнды и все левые операнды, не являющиеся ссылками, должны

быть арифметического типа.

Для объектов класса присваивание в общем случае не совпадает с инициализацией (§R.8.4, §R.12.1, §R.12.6, §R.12.8).

R.5.18 Операция запятая

Операции запятая выполняются слева направо.

выражение:

 выражение-присваивания

 выражение, выражение-присваивания

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

В контекстах, где запятая имеет специальное значение, скажем в списке фактических параметров функции (§R.5.2.2) или в списке инициализаторов (§R.8.4), описанная здесь операция запятая может появляться только в скобках, например, вызов функции

f(a, (t=3,t+2), c);

содержит три параметра, причем второй имеет значение 5.

R.5.19 Выражения-константы

В нескольких местах описания C++ требуются выражения, которые дают в результате целочисленную константу, например: в задании границ массива (§R.8.2.4), в выражениях case (§R.6.4.2), для задания длины битового поля (§R.9.6) и как инициализирующее значение элемента перечисления (§R.7.2).

выражение-константа:

 выражение-условия

В конструкции выражение-константа могут участвовать: литералы (§R.2.5), элементы перечисления, значения целочисленного типа со спецификацией const, инициализированные выражением-константой (§R.8.4) и выражения sizeof. Константы с плавающей точкой (§R.2.5.3) должны быть приведены к целочисленному типу. Допустимы только преобразования типа к целочисленному типу. В частности не допустимы функции, объекты классов, указатели и ссылки, если не считать их использования в sizeof. Операция запятая и операция присваивания не допустимы в выражении-константе.

R.6 Операторы

Все операторы, за исключением оговоренных случаев, выполняются один за другим.

оператор:

 помеченный-оператор

 оператор-выражение

 составной-оператор

 выбирающий-оператор

 оператор-цикла

 оператор-перехода

 оператор-описания

R.6.1 Помеченный оператор

Оператор можно снабдить меткой.

помеченный-оператор:

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

 case выражение-константа : оператор

 default : оператор

Использование

идентификатора в качестве метки является ее определением. Идентификатор метки может использоваться помимо этого только в качестве указания перехода в операторе goto. Областью видимости метки является функция, в которой она появилась. Метки нельзя повторно описывать в пределах одной функции. Нельзя использовать метку в операторе goto до ее определения. Метки имеют свое пространство именования и они не вступают в коллизию с другими идентификаторами.

Метки в case или default могут встречаться только в операторе переключателя.

R.6.2 Оператор-выражение

Чаще всего операторами бывают выражения; в этом случае оператор имеет такой вид:

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

 выражение opt;

Обычно операторы-выражения являются присваиваниями или вызовами функций. Все побочные эффекты выполнения оператора-выражения происходят до выполнения следующего оператора. Оператор-выражение с отсутствующим выражением называется пустым оператором. Он может пригодиться, если необходимо поставить метку перед самым концом составного оператора ({) или для задания пустого тела оператора цикла while (§R.6.5.1).

R.6.3 Составной оператор или блок

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

составной-оператор:

 { список-операторов opt }

список-операторов:

 оператор

 список-операторов оператор

Отметим, что описание считается оператором (§R.6.7).

R.6.4 Выбирающий оператор

Выбирающие операторы выбирают одну из нескольких структур управления.

выбирающий-оператор:

 if ( выражение ) оператор

 if ( выражение ) оператор else оператор

 switch ( выражение ) оператор

Оператор в выбирающем-операторе не может быть описанием.

R.6.4.1 Оператор if

Выражение должно быть арифметического типа, или типа указателя, или типа класс, для которого существует однозначное преобразование в арифметический тип или тип указателя (§R.12.3).

Вычисляется выражение, и если оно имеет отличный от нуля результат, выполняется первый вложенный оператор. Если использована конструкция else и выражение дает результат 0, выполняется второй вложенный оператор. Неоднозначность в случае нескольких конструкциями else разрешается путем отнесения else к последнему встретившемуся if, для которого не было else.

R.6.4.2 Оператор переключателя

Оператор переключателя вызывает передачу управления на один из нескольких операторов в зависимости от значения выражения.

Выражение должно быть целочисленного типа или типа класса, для которого существует однозначное преобразование к целочисленному типу (§R.12.3). Выполняются стандартные целочисленные преобразования. Любой из операторов переключателя можно пометить одним или несколькими префиксами, имеющими вид:

case выражение-константа:

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

Попаданка в академии драконов 2

Свадьбина Любовь
2. Попаданка в академии драконов
Любовные романы:
любовно-фантастические романы
6.95
рейтинг книги
Попаданка в академии драконов 2

Береги честь смолоду

Вяч Павел
1. Порог Хирург
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Береги честь смолоду

Клан

Русич Антон
2. Долгий путь домой
Фантастика:
боевая фантастика
космическая фантастика
5.60
рейтинг книги
Клан

Афганский рубеж

Дорин Михаил
1. Рубеж
Фантастика:
попаданцы
альтернативная история
7.50
рейтинг книги
Афганский рубеж

Физрук: назад в СССР

Гуров Валерий Александрович
1. Физрук
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Физрук: назад в СССР

Огни Аль-Тура. Желанная

Макушева Магда
3. Эйнар
Любовные романы:
любовно-фантастические романы
эро литература
5.25
рейтинг книги
Огни Аль-Тура. Желанная

Кодекс Охотника. Книга III

Винокуров Юрий
3. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
7.00
рейтинг книги
Кодекс Охотника. Книга III

(не)Бальмануг.Дочь

Лашина Полина
7. Мир Десяти
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
(не)Бальмануг.Дочь

Внешняя Зона

Жгулёв Пётр Николаевич
8. Real-Rpg
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Внешняя Зона

Измена. Верни мне мою жизнь

Томченко Анна
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Верни мне мою жизнь

Везунчик. Проводник

Бубела Олег Николаевич
3. Везунчик
Фантастика:
фэнтези
6.62
рейтинг книги
Везунчик. Проводник

Особое назначение

Тесленок Кирилл Геннадьевич
2. Гарем вне закона
Фантастика:
фэнтези
6.89
рейтинг книги
Особое назначение

Вперед в прошлое 2

Ратманов Денис
2. Вперед в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вперед в прошлое 2

Проклятый Лекарь IV

Скабер Артемий
4. Каратель
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Проклятый Лекарь IV