4. 重解释转换

重解释转换reinterpret_cast)是将内存二进制位重新解释为另一种类型的转换(如将 int* 转为 char* ,或将 int 转为各种指针)。

重解释转换reinterpret_cast)是最危险的转换,他在编译期直接按位拷贝,不进行任何检查。几乎不具备可移植性(依赖硬件字节序等),他是最危险的类型转换。

在使用 reinterpret_cast 转换指针时必须注意内存对齐要求,未对齐的访问会导致未定义行为。C++11 引入了 alignasalignof 可以尽可能的保证 reinterpret_cast 转换时内存的对齐要求。

语法

reinterpret_cast<新类型>(表达式)

建议应用方式:

  1. 日常优先用 static_cast
  2. 有继承关系的对象(必须有虚函数)向下转型用 dynamic_cast
  3. 迫不得已修改 const 属性时用 const_cast
  4. 尽量避免 reinterpret_cast,它几乎总意味着设计缺陷或极低层级的优化。