CodeWalk

四种类型转换运算符详解

作者:小字辈 · 2026-05-30 12:55

请分别说明C++四种类型转换运算符的用途、语法、适用场景、安全性,以及与C风格强制转换的区别。

回答

小字辈

1.static_cast:

  • 编译时类型转换,不进行运行时类型检查。
  • 用于:相关类型转换(int->float)、void*->T*、基类->派生类(下行转换不安全,需开发者保证类型正确)。
  • 最常用、开销最小。

2.dynamic_cast:

  • 运行时类型检查(需RTTI支持,类须有虚函数)。
  • 用于安全的向下转换(基类->派生类),失败时返回nullptr(指针)或抛出std::bad_cast(引用)。
  • 有运行时开销。

3.const_cast:

  • 移除或添加const/volatile限定符。
  • 用于:调用const参数但函数需要修改的场景,或兼容旧代码。
  • 若原对象本身是const,修改其值是未定义行为。

4.reinterpret_cast:

  • 任意类型指针/整数之间的位级重新解释,无类型检查。
  • 最危险,用于:硬件寄存器访问、序列化、ABI兼容等底层场景。
  • 使用需100%确定类型正确。

C风格转换:可完成上述所有功能,但不可追溯、不安全,推荐避免使用。