4. 重解释转换
重解释转换(reinterpret_cast)是将内存二进制位重新解释为另一种类型的转换(如将 int* 转为 char* ,或将 int 转为各种指针)。
重解释转换(reinterpret_cast)是最危险的转换,他在编译期直接按位拷贝,不进行任何检查。几乎不具备可移植性(依赖硬件字节序等),他是最危险的类型转换。
在使用 reinterpret_cast 转换指针时必须注意内存对齐要求,未对齐的访问会导致未定义行为。C++11 引入了 alignas 和 alignof 可以尽可能的保证 reinterpret_cast 转换时内存的对齐要求。
语法
reinterpret_cast<新类型>(表达式)
建议应用方式:
- 日常优先用
static_cast。 - 有继承关系的对象(必须有虚函数)向下转型用
dynamic_cast。 - 迫不得已修改
const属性时用const_cast。 - 尽量避免
reinterpret_cast,它几乎总意味着设计缺陷或极低层级的优化。