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