C++推荐用static_cast和dynamic_cast进行显式类型转换:static_cast用于编译期安全转换(如基本类型、向上转型、void*互转),dynamic_cast用于多态类型的运行时安全向下转型,需虚函数支持。
C++ 中类型转换分隐式和显式两种,显式转换推荐用 static_cast 和 dynamic_cast,它们语义清晰、类型安全,比 C 风格强制转换(如 (int)x)更可靠。
用于已知安全、有明确定义关系的类型间转换,编译器在编译时验证是否合法,不涉及运行时开销。
double → int、int → float(注意精度丢失)std::string → const char* 不行,但自定义类可支持)⚠️ 注意:static_cast 不检查向下转型(基类 → 派生类)是否真正安全,错误使用会导致未定义行为。
专为多态类型设计,
仅适用于含至少一个虚函数的类(即“多态类型”),转换失败时返回 nullptr(指针)或抛出 std::bad_cast(引用)。
示例:Base* b = new Derived; Derived* d = dynamic_cast 成功;若 b 实际指向 Base 对象,则 d 为 nullptr。
简单判断逻辑:
int 变 double,或把 Derived* 变 Base* → 用 static_cast
dynamic_cast
void* 还原回原始类型(比如从容器取数据)→ 用 static_cast,但务必确保类型匹配Base* 强转成 Derived* 且不关心是否安全 → static_cast 可能编译通过但危险;应优先考虑 dynamic_cast + 判空C 风格转换((T)x)和 const_cast/reinterpret_cast 有特定用途,但日常开发中应避免滥用。尤其 reinterpret_cast 绕过类型系统,极易引发未定义行为;const_cast 仅用于移除 const 性质,且修改原 const 对象仍是未定义行为。