17.2.3 reinterpret_cast操作符

    reinterpret_cast的调用格式和上述两个操作符一致,如下所示。


    reinterpret_cast<T>(expr)

    reinterpret_cast无法保证转换的安全性,它用来将一种类型指针转变为另一种类型的指针,也用于将整型量转为指针或将指针转为整型量,如示例代码17.3所示。

    代码17.3 reinterpret_cast用法ReinterpretCastSample


    <—————————————-文件名:example1703.cpp—————————————-> 01 #include<iostream> 02 using namespace std; 03 int main() 04 { 05 double i=2. 5; 06 double*p=&i; 07 int*pc=NULL; 08 pc=reinterpret_cast<int*>(p);//指针间的相互转换,地址赋值 09 cout<<(*pc)<<endl; 10 return 0; 11 }

    输出结果如下所示。


    0

    【代码解析】代码第8行完成的仅是指针的赋值,所以(*pc)中存储的仅是8字节double变量i中的前4个字节。因此,这种转换和硬件联系紧密,移植性较差,在不同的硬件系统中,代码17.3的输出结果可能不同。

    reinterpret_cast的两个使用限制如下所述。

    ❑指针类型转换成整型时,必须转换成能存储其表示的整型(在Windows+VC6下必须要4个字节),不能转化成更小的整型数。

    ❑函数指针和数据指针间不能相互转换。

    说明

    reinterpret_cast绕开了指针类型检查机制,对内存字节逐个处理。