Читать «Справочное руководство по C++» онлайн - страница 22

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

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

Указатель на функцию можно явно преобразовать в указатель на некоторый объект при условии, что тип указателя на этот объект достаточно велик, чтобы хранить указатель на функцию. Указатель на некоторый объект можно явно преобразовать в указатель на функцию при условии, что тип указателя на функцию достаточно велик, чтобы хранить указатель на этот объект. В обоих случаях, использование указателя, получившегося в результате преобразования, может вызвать особую адресную ситуацию, или что-нибудь похуже, если исходный указатель не настроен на соответствующий объект.

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