1、reinterpret_cast
不知道Adboe为什么总爱问reinterpret_cast这个很不安全的操作符的问题,既然人家问,就要搞清楚吧
reinterpret_cast的不安全,在于它是进行比特位的拷贝,例
int n=9;
double d=reinterpret_cast<double & > (n); //这里不能用<double>编译会报错,似乎编译器认定<>里不可以有非指针类型(引用可以)。
结果就会出问题。原因 将整形转化成double引用,没有进行相应的二进制转化,只是把比特位简单拷贝。
为了验证以上的结论,做个试验,在上述两行代码下加行代码
int r=static_cast<int>d; //输出结果是8000 0000
然而当加如下代码时
int r=reinterpret_cast<int&>(d);//注意<>里还只能是引用
结果r=9;
注意:
A)这里提下static_cast,这个运算符可以转换类型,也可以转换指针,但是指针必须是基类和继承类,如果是double*和int*,会报编译错误,所以上述转换必须用reinterpret_cast。实际上用reinterpret_cast<>转化后的指针地址是一样的,不过切记指针类型已不同了,否则虽然地址相同,但解析成不同的指针类型,读到的最终结果