通八洲科技

C++如何进行类型转换?(static_cast与dynamic_cast)

日期:2025-12-29 00:00 / 作者:尼克
C++推荐用static_cast和dynamic_cast进行显式类型转换:static_cast用于编译期安全转换(如基本类型、向上转型、void*互转),dynamic_cast用于多态类型的运行时安全向下转型,需虚函数支持。

C++ 中类型转换分隐式和显式两种,显式转换推荐用 static_castdynamic_cast,它们语义清晰、类型安全,比 C 风格强制转换(如 (int)x)更可靠。

static_cast:编译期检查的“常规”转换

用于已知安全、有明确定义关系的类型间转换,编译器在编译时验证是否合法,不涉及运行时开销。

⚠️ 注意:static_cast 不检查向下转型(基类 → 派生类)是否真正安全,错误使用会导致未定义行为。

dynamic_cast:运行时检查的“安全向下转型”

专为多态类型设计,仅适用于含至少一个虚函数的类(即“多态类型”),转换失败时返回 nullptr(指针)或抛出 std::bad_cast(引用)。

示例:Base* b = new Derived; Derived* d = dynamic_cast(b); 成功;若 b 实际指向 Base 对象,则 dnullptr

别混淆:什么时候该用哪一个?

简单判断逻辑:

不推荐的替代方式

C 风格转换((T)x)和 const_cast/reinterpret_cast 有特定用途,但日常开发中应避免滥用。尤其 reinterpret_cast 绕过类型系统,极易引发未定义行为;const_cast 仅用于移除 const 性质,且修改原 const 对象仍是未定义行为。