Синтаксис данной формы операции приведения таков:
reinterpret_cast<Целевой_тиn> (аргумент)
Такую операцию можно применить для того, чтобы изменить интерпретацию объекта без действительного преобразования данных.
Целевой_тип может быть типом ссылки, указателя, целым, перечислимым или вещественным типом.
Если целевой_тип — тип указателя или ссылки, то аргумент может быть указателем или ссылкой, а также числовой (вещественной, целой, перечислимой) переменной; когда целевым типом является числовой тип, то операнд может быть указателем или ссылкой.
Операция возвращает значение целевого типа.
Возможно, например, явное преобразование указателя в целый тип, равно как и обратная операция. Можно приводить указатель на функцию одного •типа к указателю на функцию другого типа или на некоторый объект, при условии, что он (указатель на объект) имеет достаточную разрядность.
Вот пример преобразования указателя в целое и наоборот:
////////////////////////////////////////////////
// Reinterpret.срр: Демонстрация reinterpret_cast
//
#include <iostream.h>
#pragma hdrstop
#include <condefs.h>
int main () {
int i = 7;
int *ip = Si;
int temp = reinterpret cast<int>(ip);
cout.setf(ios::showbase) ;
cout << "Pointer value is"<< ip << end1;
cout << "Representation of a pointer as int is " << hex << temp << endl;
cout << "Convert it back and dereference:"<<*reinterpret_cast<int*>(temp) << endl;
return 0;
}
Эта программа выводит:
Pointer value is 0065FEOO
Representation of a pointer as int is Ox65fe00
Convert it back and dereference: 0х7
Все это можно проделать, разумеется, и с помощью обычных операций приведения, однако последние мало надежны. Тут при опечатках могут происходить совершенно дикие преобразования, и компилятор не выдает даже предупреждающих сообщений. Специальные же операции имеют более корректный вид и явно показывают, что вы делаете.