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

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

Жанры

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

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

Шрифт:

R.5.10 Операции сравнения на равенство

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

 выражение-отношения

 выражение-равенства == выражение-отношения

 выражение-равенства != выражение-отношения

Операции == (равно) и != (не равно) аналогичны операциям отношения, за исключением того, что их приоритет ниже. (Таким образом, операция a‹b == c‹d дает результат 1, если выражения a‹b и c‹d имеют одно и то же значение.)

Кроме этого, можно сравнивать указатели на члены одного типа. Производятся преобразования указателя на член (§R.4.8).

Указатель на член можно сравнить с выражением-константой, которое дает результат 0.

R.5.11 Поразрядная операция И

выражение-И:

 выражение-равенства

 выражение-И & выражение-равенства

Выполняются обычные арифметические преобразования, результат - поразрядная функция И от операндов. Операция применима только к целочисленным операндам.

R.5.12 Поразрядная (исключающая) операция ИЛИ

выражение-исключающего-ИЛИ:

 выражение-И

 выражение-исключающего-ИЛИ ^ выражение-И

Выполняются обычные арифметические преобразования, результат - поразрядная исключающая функция ИЛИ от операндов. Операция применима только к целочисленным операндам.

R.5.13 Поразрядная (включающая) операция ИЛИ

выражение-ИЛИ:

 выражение-исключающего-ИЛИ

 выражение-ИЛИ | выражение-исключающего-ИЛИ

Выполняются обычные арифметические преобразования, результат - поразрядная функция ИЛИ от операндов. Операция применима только к целочисленным типам.

R.5.14 Логическая операция И

логическое-выражение-И:

 выражение-ИЛИ

 логическое-выражение-И && выражение-ИЛИ

Операции && выполняются слева направо. Такая операция дает результат 1, если оба операнда ее отличны от нуля, иначе результат - 0. В отличие от & при операции && гарантируется вычисление слева направо, более того, второй операнд не вычисляется, если первый операнд равен 0.

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

R.5.15 Логическая операция ИЛИ

логическое-выражение-ИЛИ:

 логическое-выражение-И

 логическое-выражение-ИЛИ || логическое-выражение-И

Операции || выполняются слева направо. Результат операции 1, если один из ее операндов отличен от нуля, иначе результат - 0. В отличие от | при операции || гарантируется вычисление слева направо, более того, второй операнд не вычисляется, если значение первого операнда отлично от нуля.

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

R.5.16 Операция условия

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

 логическое-выражение-ИЛИ

 логическое-выражение-ИЛИ ?
выражение : выражение-условия

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

Если второе и третье выражение арифметического типа, и типы их совпадают, то таким же будет и тип результата, если они различаются, то выполняются обычные арифметические преобразования, чтобы привести их к общему типу. Если второе и третье выражение являются указателями или выражением-константой, дающим результат 0, выполняются преобразования указателей, чтобы привести результаты выражений к общему типу. Если второе и третье выражение являются ссылками, выполняется преобразование ссылок, чтобы привести их к общему типу. Если второе и третье выражение имеют тип void, общий тип будет void. Если второе и третье выражение имеют один тип класс T, общим типом будет T. Иначе, выражение считается недопустимым. Тип результата есть общий тип. Вычисляется только второе или третье выражение (но не оба). Результат будет адресом, если второй и третий операнд одного типа и являются адресами.

R.5.17 Операции присваивания

Существует несколько операций присваивания, все они выполняются справа налево. Для всех них требуется, чтобы левым операндом был изменяемый адрес. Тип выражения присваивания совпадает с типом левого операнда. Результат операции присваивание - значение, хранящееся в левом операнде после того как произошло присваивание. Результат является адресом.

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

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

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

операция-присваивания: один из

 = *= /= %= += -= ››= ‹‹= &= ^= |=

При простом присваивании (=) значение выражения заменяет собой значение объекта, с которым сопоставляется левый операнд. Если оба операнда арифметического типа, правый операнд, прежде чем произойдет присваивание, преобразуется к типу левого операнда. Неявные преобразования к типу перечисления (§R.7.2) не производятся, поэтому если левый операнд имеет тип перечисления, правый операнд должен быть таким же. Если левый операнд имеет тип указателя, правый операнд должен быть типа указателя или выражением-константой, дающим результат 0. Правый операнд преобразуется к типу левого операнда, прежде выполнения присваивания.

Указатель типа T* const можно присваивать указателю типа T*, но обратное присваивание считается незаконным (§R.7.1.6). Объекты типа const T или volatile T можно присваивать по адресу типа T или volatile T (см. так же §R.8.4).

Если левый операнд имеет тип указателя на член, правый операнд должен быть типа указатель на член или выражением-константой, дающим результат 0; перед присваиванием правый операнд преобразуется к типу левого операнда.

Присваивание объектам класса X (§R.9) задается функцией X::operator= (§R.13.4.3). Если пользователь не определил свою функцию X::operator=, для присваивания используется стандартный вариант (§R.12.8). Отсюда следует, что объект класса, который является прямым или непрямым производным от X, и однозначно описан как производный в части public (§R.4.6), можно присвоить объекту X.

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

Смертельно влюблён

Громова Лиза
Любовные романы:
современные любовные романы
4.67
рейтинг книги
Смертельно влюблён

Свет Черной Звезды

Звездная Елена
6. Катриона
Любовные романы:
любовно-фантастические романы
5.50
рейтинг книги
Свет Черной Звезды

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

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

Маленькая хозяйка большого герцогства

Вера Виктория
2. Герцогиня
Любовные романы:
любовно-фантастические романы
7.80
рейтинг книги
Маленькая хозяйка большого герцогства

Отверженный VII: Долг

Опсокополос Алексис
7. Отверженный
Фантастика:
городское фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Отверженный VII: Долг

Найти себя. Трилогия

Эс Евгений
Найти себя
Фантастика:
фэнтези
5.00
рейтинг книги
Найти себя. Трилогия

Ритуал для призыва профессора

Лунёва Мария
Любовные романы:
любовно-фантастические романы
7.00
рейтинг книги
Ритуал для призыва профессора

Темный Лекарь 11

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

Господин следователь. Книга 3

Шалашов Евгений Васильевич
3. Господин следователь
Детективы:
исторические детективы
5.00
рейтинг книги
Господин следователь. Книга 3

Охота на попаданку. Бракованная жена

Герр Ольга
Любовные романы:
любовно-фантастические романы
5.60
рейтинг книги
Охота на попаданку. Бракованная жена

Сандро из Чегема (Книга 1)

Искандер Фазиль Абдулович
Проза:
русская классическая проза
8.22
рейтинг книги
Сандро из Чегема (Книга 1)

Элита элит

Злотников Роман Валерьевич
1. Элита элит
Фантастика:
боевая фантастика
8.93
рейтинг книги
Элита элит

Ученик

Первухин Андрей Евгеньевич
1. Ученик
Фантастика:
фэнтези
6.20
рейтинг книги
Ученик

Идеальный мир для Лекаря 17

Сапфир Олег
17. Лекарь
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 17