Бьярн Страустрап - Справочное руководство по C++
- Название:Справочное руководство по C++
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Бьярн Страустрап - Справочное руководство по C++ краткое содержание
Справочное руководство по C++ - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Пустой указатель (0) преобразуется сам в себя.
Пока еще неопределенный класс можно использовать в операции приведения указателя, в этом случае никаких допущений о структуре класса не делается (§R.10.1).
Любой объект можно явно преобразовать к типу ссылки X&, если указатель на этот объект можно явно преобразовать в тип X*. В результате приведения к ссылке не происходит вызовов конструкторов или функций преобразований. Преобразование ссылки на базовый класс в ссылку на производный класс рассматривается аналогично преобразованию указателя на базовый класс в указатель на производный класс, учитывая вопросы однозначности, виртуальных классов и т.д.
Результатом приведения к ссылке является адрес, в отличие от всех остальных приведений. Результат приведения указателя или ссылки настроен на тот же объект, что и исходное выражение без операции приведения.
Указатель на функцию можно явно преобразовать в указатель на некоторый объект при условии, что тип указателя на этот объект достаточно велик, чтобы хранить указатель на функцию. Указатель на некоторый объект можно явно преобразовать в указатель на функцию при условии, что тип указателя на функцию достаточно велик, чтобы хранить указатель на этот объект. В обоих случаях, использование указателя, получившегося в результате преобразования, может вызвать особую адресную ситуацию, или что-нибудь похуже, если исходный указатель не настроен на соответствующий объект.
Указатель на функцию одного типа можно явно преобразовать в указатель на функцию другого типа. Результат вызова функции с помощью указателя на функцию, тип которой отличен от типа, использованного при определении первой функции, неопределен (см. так же §R.4.6).
Объект или значение можно преобразовать в объект типа класс только при условии, что определен подходящий конструктор или операция преобразования (§R.12.3).
Указатель на член можно явно преобразовать в указатель на другой член, если оба участвующих типа являются типами указателей на члены одного класса, или, если оба типа являются указателями на функцию-член классов, один из которых получается как однозначное производное от другого (§R.4.8).
Указатель на объект с типом, имеющим спецификацию const, можно привести к указателю с типом без спецификации const. Получившийся в результате указатель будет настроен на исходный объект. Объект с типом, имеющим спецификацию const, или ссылку на объект такого типа можно привести в ссылку на объект с типом без const. Получившаяся в результате ссылка будет настроена на исходный объект. В результате попытки изменить этот объект с помощью такой ссылки или указателя может возникнуть особая ситуация или он будет таким же, как при обращении с помощью исходной ссылки или указателя к объекту, тип которого не содержит const. Возникнет ли особая адресная ситуация зависит от реализации.
Указатель на объект типа со спецификацией volatile можно привести к указателю на объект типа без volatile. В результате получится указатель, настроенный на исходный объект. Объект типа с volatile или ссылку на такой объект можно привести к ссылке на объект с типом без volatile.
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 является указателем на следующий объект массива. Если же получившийся в результате сложения указатель вышел за границы массива, результат будет неопределенным, кроме случая, когда указатель настроен на первый адрес больший верхней границы массива.
Результатом операции - будет разность операндов. Значение любого целочисленного типа можно вычитать из указателя, при этом применяются те же преобразования, что и для операции +.
Никакие другие сочетания типов для указателей не допустимы.
Читать дальшеИнтервал:
Закладка: