c++中的类型转换有哪几种_c++ static_cast, dynamic_cast, const_cast用法【安全】

admin 百科 9
C++类型转换分隐式和显式两类,显式含static_cast(安全常用)、dynamic_cast(多态下行安全)、const_cast(调整cv限定符)和危险的reinterpret_cast。

c++中的类型转换有哪几种_c++ static_cast, dynamic_cast, const_cast用法【安全】-第1张图片-佛山资讯网

C++ 中的类型转换分为隐式转换和显式转换两大类,显式转换又细分为四种 命名强制转换(named cast):`static_cast`、`dynamic_cast`、`const_cast` 和 `reinterpret_cast`。其中前三种在日常开发中较常用且相对安全,而 `reinterpret_cast` 风险极高,应尽量避免。

static_cast:最常用的安全转换

用于有明确逻辑关系的类型间转换,编译期检查,不涉及运行时开销。适合以下场景:

  • 基本类型之间转换(如 int → doubledouble → int),但会丢失精度或截断,需开发者自行负责
  • 派生类指针/引用 → 基类指针/引用(上行转换),安全且推荐
  • 基类指针/引用 → 派生类指针/引用(下行转换),仅当确定对象实际类型时才可用,否则行为未定义(不安全!)
  • 枚举 ↔ 整型(需注意底层类型匹配)
  • 调用自定义类型转换函数(如 operator double())

示例:

double d = 3.14;<br>
int i = static_cast<int>(d); // 合理,但截断小数<br>
Base* b = new Derived;<br>
Derived* d_ptr = static_cast<Derived*>(b); // 可行,但若 b 实际不是 Derived 就崩溃

登录后复制

dynamic_cast:唯一支持运行时类型检查的转换

专用于多态类型的指针或引用的下行转换(基类 → 派生类),要求基类至少有一个虚函数(即支持 RTTI)。转换失败时:

  • 对指针返回 nullptr
  • 对引用抛出 std::bad_cast 异常

这是 最安全的下行转换方式,代价是轻微运行时开销。

标签: c++ 隐式转换

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~