reinterpret_cast <new_type> (expression)
reinterpret_cast运算符是用来处理无关类型之间的转换;它会产生一个新的值,这个值会有与原始参数(expressoin)有完全相同的比特位。
具体可参阅:C++新式转型之reinterpret_cast
reinterpret_cast的字面意思:重新解释(类型的比特位)。
从指针类型到一个足够大的整数类型
从整数类型或者枚举类型到指针类型
从一个指向函数的指针到另一个不同类型的指向函数的指针
从一个指向对象的指针到另一个不同类型的指向对象的指针
从一个指向类函数成员的指针到另一个指向不同类型的函数成员的指针
从一个指向类数据成员的指针到另一个指向不同类型的数据成员的指针
reinterpret_cast
在低级编程以及硬件接口的开发过程中,常常需要将一个特定的物理内存地址赋值给一个指针。为此必须使用
reinterpret_cast操作符计算地址值。例子如下:
void *p;
// 将地址 0x5800FF 付给指针 p
p = reinterpret_cast< void* > (0x5800FF);
static_cast
通常这个运算符用来进行数值类型间的转化,比如int到float,也可以是自定义的某些数据类型的转化。这个操作符通常也可以用于类指针之间的转化,但是这个运算符在父类到子类的转化中,没有做检查并不安全。
总结
reinterpret_cast很强大,强大到可以“随便”转型,因为他是编译器面向二进制的转型,但安全性需要考虑。