Справочник по C/C++
Операторы привидения типа

Оператор приведения типа заставляет компилятор преобразовать один тип данных в другой. Он имеет следующую форму записи.

(тип) выражение

Здесь элемент тип означает желаемый тип данных.

Например после выполнения следующей операции приведения типа результат деления заданных чисел будет иметь тип double.

double d;
d = (double) 10/3;

Операторы приведения типа в языке C++

Язык C++ поддерживает дополнительные операторы приведения типа: const_cast, dynamic_cast, reinterpret_cast и static_cast. Их общие формы записи выглядят следующим образом.

const_cast<тип> (объект)
dynamic_cast<тип> (объект)
reinterpret_cast<тип> (объект)
static_cast<тип> (объект)

Здесь элемент тип задает новый тип, а элемент объект — объект, который должен приобрести новый тип.

Оператор const_cast используется для явного переопределения модификаторов const и/или volatile. Новый тип должен совпадать с исходным типом, за исключением изменения его атрибутов const или volatile. Чаще всего оператор const_cast используется для удаления атрибута const.

Оператор dynamic_cast проверяет законность выполнения заданной операции приведения типа. Если такую операцию выполнить нельзя, то выражение устанавливается равным нулю. Этот оператор в основном используется для полиморфных типов. Например, если даны два полиморфных класса, В и D, причем класс D выведен из класса В, то оператор dynamic_cast всегда может преобразовать указатель D* в указатель В*. Оператор dynamic_cast может преобразовать указатель В* в указатель D* только в том случае, если адресуемым объектом является объект D. И вообще, оператор dynamic_cast будет успешно выполнен только при условии, что разрешено полиморфное приведение типов(т.е. если новый тип можно законно применять к типу объекта, который подвергается этой операции). Если операцию приведения типа выполнить нельзя, результат действия оператора dynamic_cast оценивается как нулевой.

Оператор static_cast выполняет не полиморфное приведение типов. Например, его можно использовать для приведения указателя на базовый класс к типу указателя на производный класс. Его можно также использовать для любого стандартного преобразования. При этом никакие проверки во время работы программы не выполняются.

Оператор reinterpret_cast переводит один тип в совершенно другой. Например, его можно использовать для перевода указателя в целый тип. Оператор reinterpret_cast следует использовать для перевода типов указателей, которые несовместимы по своей природе.

Однако следует помнить, что только оператор const_cast может освободить от "обета постоянства", т.е. ни один из остальных операторов этой группы(dynamic_cast, static_cast, reinterpret_cast) не может "снять" с объекта атрибут const.






Нет комментариев.



Оставить комментарий:
Ваше Имя:
Email:
Антибот: *  
Ваш комментарий: