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

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

Жанры

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

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

Шрифт:

 выражение-pm .* выражение-приведения

 выражение-pm -›* выражение-приведения

Бинарная операция .* связывает свой второй операнд, который должен иметь тип "указатель на член класса T", с первым операндом, имеющим тип класс T или такой класс, для которого T является однозначно определенным и достижимым базовым классом. Результатом будет объект или функция с типом, задаваемым вторым операндом.

Бинарная операция -›* связывает свой второй операнд, который должен иметь тип "указатель на член класса T", с первым операндом, имеющим тип "указатель на T" или тип "указатель на класс, для которого T является однозначно определенным

и достижимым базовым классом". Результатом будет объект или функция с типом, задаваемым вторым операндом.

Если результат .* или -›* есть функция, то его можно использовать только в качестве операнда операции вызова функции , например, операция

(ptr_to_obj-›*ptr_to_mfct)(10);

приводит к вызову функции-члена, обозначенной ptr_to_mfct, для объекта, на который настроен указатель ptr_to_obj. Результат операции .* или -›* является адресом, если второй операнд есть адрес.

R.5.6 Мультипликативные операции

Мультипликативные операции *, /, и % выполняются слева направо.

Мультипликативное-выражение:

 выражение-pm

 мультипликативное-выражение * выражение-pm

 мультипликативное-выражение / выражение-pm

 мультипликативное-выражение % выражение-pm

Операнды операций * и / должны иметь арифметический тип, операнды для % должны быть целочисленного типа. Обычные арифметические преобразования (§R.4.5) производятся над операндами и определяют тип результата.

Бинарная операция * обозначает умножение.

Бинарная операция / вычисляет частное, а бинарная операция % вычисляет остаток от деления первого выражения на второе. Если второй операнд у / или % есть 0, результат неопределен, иначе (a/b)*b + a%b должно равняться a. Если оба операнда неотрицательны, то таким же будет и результат, в противном случае знак результата определяется реализацией.

R.5.7 Аддитивные операции

Аддитивные операции + и - выполняются слева направо, при этом происходят обычные арифметические преобразования (§R.4.5) операндов арифметического типа.

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

 мультипликативное-выражение

 аддитивное выражение + мультипликативное-выражение

 аддитивное-выражение - мультипликативное-выражение

Операнды должны быть арифметического типа или типа указателя. Результатом операции + является сумма операндов. Можно складывать указатель на объект в массиве и значение любого целочисленного типа. Результатом будет указатель того же типа, что и исходный указатель, но он будет настроен на другой объект массива с заданным смещением от исходного объекта. Так, если P есть указатель на объект массива, выражение P+1 является указателем на следующий объект массива. Если же получившийся в результате сложения указатель вышел за границы массива, результат будет неопределенным, кроме случая, когда указатель настроен на первый адрес больший верхней границы массива.

Результатом операции - будет разность операндов. Значение любого целочисленного типа можно вычитать из указателя, при этом применяются те же преобразования, что и для операции +.

Никакие другие сочетания типов для указателей не допустимы.

Если вычитаются два указателя на объекты одного типа, результатом будет целочисленное значение со знаком, которое показывает на сколько объектов этого типа отстоят друг от друга

указуемые объекты. Указатели на соседние элементы массива отстоят на 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) этих членов различны, результат будет не определен. Если два указателя настроены на члены (данные) одного и того же объединения, они считаются равными. Если два указателя настроены на элементы одного массива или смотрят за границу массива, то указатель, настроенный на элемент с большим индексом, будет большим. Все другие сравнения указателей определяются реализацией.

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

Академия

Кондакова Анна
2. Клан Волка
Фантастика:
боевая фантастика
5.40
рейтинг книги
Академия

Охотник за головами

Вайс Александр
1. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Охотник за головами

Низший 2

Михайлов Дем Алексеевич
2. Низший!
Фантастика:
боевая фантастика
7.07
рейтинг книги
Низший 2

Попаданка в деле, или Ваш любимый доктор - 2

Марей Соня
2. Попаданка в деле, или Ваш любимый доктор
Любовные романы:
любовно-фантастические романы
7.43
рейтинг книги
Попаданка в деле, или Ваш любимый доктор - 2

Боги, пиво и дурак. Том 3

Горина Юлия Николаевна
3. Боги, пиво и дурак
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Боги, пиво и дурак. Том 3

Ты не мой Boy 2

Рам Янка
6. Самбисты
Любовные романы:
современные любовные романы
короткие любовные романы
5.00
рейтинг книги
Ты не мой Boy 2

Комендант некромантской общаги 2

Леденцовская Анна
2. Мир
Фантастика:
юмористическая фантастика
7.77
рейтинг книги
Комендант некромантской общаги 2

Экономка тайного советника

Семина Дия
Фантастика:
фэнтези
5.00
рейтинг книги
Экономка тайного советника

Душелов. Том 2

Faded Emory
2. Внутренние демоны
Фантастика:
фэнтези
боевая фантастика
аниме
5.00
рейтинг книги
Душелов. Том 2

Любимая учительница

Зайцева Мария
1. совершенная любовь
Любовные романы:
современные любовные романы
эро литература
8.73
рейтинг книги
Любимая учительница

Довлатов. Сонный лекарь 3

Голд Джон
3. Не вывожу
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Довлатов. Сонный лекарь 3

Санек

Седой Василий
1. Санек
Фантастика:
попаданцы
альтернативная история
4.00
рейтинг книги
Санек

Страж Кодекса. Книга VI

Романов Илья Николаевич
6. КО: Страж Кодекса
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Страж Кодекса. Книга VI

Черный маг императора 2

Герда Александр
2. Черный маг императора
Фантастика:
юмористическая фантастика
попаданцы
аниме
6.00
рейтинг книги
Черный маг императора 2