四种类型转换运算符详解
请分别说明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风格转换:可完成上述所有功能,但不可追溯、不安全,推荐避免使用。