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



R.5.5 Операции указатель-на-член

Операции указатель-на-член применяются слева направо.

>выражение-pm:

> выражение-приведения

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