Бьярн Страустрап - Справочное руководство по C++
- Название:Справочное руководство по C++
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Бьярн Страустрап - Справочное руководство по C++ краткое содержание
Справочное руководство по C++ - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Если вычитаются два указателя на объекты одного типа, результатом будет целочисленное значение со знаком, которое показывает на сколько объектов этого типа отстоят друг от друга указуемые объекты. Указатели на соседние элементы массива отстоят на 1. Тип результата зависит от реализации, но он должен быть определен как ptrdiff_t в стандартном заголовочном файле ‹stddef.h›. Результат не определен, если указатели не настроены на элементы одного массива. Если P есть указатель на последний элемент массива, то (P+1) - 1 есть P.
R.5.8 Операции сдвига
Операции сдвигов ‹‹ и ›› выполняются слева направо.
сдвиговое-выражение:
аддитивное-выражение
сдвиговое-выражение ‹‹ аддитивное выражение
сдвиговое-выражение ›› аддитивное выражение
Операнды должны быть целочисленного типа, и над ними производятся стандартные целочисленные преобразования. Тип результата совпадает с типом преобразованного левого операнда. Результат не определен, если правый операнд отрицателен или больше или равен числу разрядов в двоичном представлении преобразованного левого операнда. Значением выражения E1‹‹E2 будет E1 (рассматриваемое как набор разрядов), сдвинутое влево на E2 разрядов, причем освободившиеся разряды заполняются нулями. Значением выражения E1››E2 будет E1, сдвинутое вправо на E2 разрядов. Если E1 беззнакового типа или имеет неотрицательное значение, гарантируется, что сдвиг вправо - логический (заполнение нулями), иначе результат зависит от реализации.
R.5.9 Операции отношения
Операции отношения выполняются слева направо, но этот факт мало что дает, ибо выражение a‹b‹c означает (a‹b)‹c, а вовсе не (a‹b)&&(b‹c).
выражение-отношения:
сдвиговое-выражение
выражение-отношения ‹ сдвиговое-выражение
выражение-отношения › сдвиговое-выражение
выражение-отношения ‹= сдвиговое-выражение
выражение-отношения ›= сдвиговое-выражение
Операнды должны быть арифметического типа или типа указателей. Операции ‹ (меньше чем), › (больше чем), ‹= (меньше или равно) и ›= (больше или равно) дают результат 0, если указанное отношение не выполняется, и 1, если оно выполняется. Тип результата int.
Над арифметическими операндами выполняются обычные арифметические преобразования. Над указателями выполняются обычные преобразования указателей. Предполагается, что любой указатель можно сравнить с выражением, имеющим результат 0, и любой указатель можно сравнить с указателем, имеющим тип void* (в этом случае указатель сначала преобразуется к типу void*). Указатели на объекты или функции одного типа (после преобразования указателей) можно сравнивать, результат зависит от взаимного расположения в памяти объектов или функций.
Два указателя на один и тот же объект считаются равными. Если два указателя настроены на нестатические члены одного объекта, то указатель, настроенный на член, описанный позднее, считается большим, при условии, что члены не имеют разных спецификаций указатель-доступа (§R.11.1), а класс не является объединением. Если два указателя настроены на нестатические члены одного объекта и спецификации указателей-доступа (§R.11.1) этих членов различны, результат будет не определен. Если два указателя настроены на члены (данные) одного и того же объединения, они считаются равными. Если два указателя настроены на элементы одного массива или смотрят за границу массива, то указатель, настроенный на элемент с большим индексом, будет большим. Все другие сравнения указателей определяются реализацией.
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 Операция условия
выражение-условия:
Интервал:
Закладка: