C++ 中的显式类型转换
| cast 类型 | 用途 | 安全性 | 常用程度 | 学起来一句话总结 |
|---|---|---|---|---|
static_cast | 编译期安全转换 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 能编译过的正常类型转换基本用它 |
reinterpret_cast | 位级别重解释 | ⭐ | ⭐ | 允许你'把东西当成另一种东西看' |
const_cast | 去掉 / 添加 const | ⭐⭐⭐ | ⭐⭐⭐ | 唯一可以丢掉 const 的 cast |
dynamic_cast | 运行时检查 RTTI 的安全向下转型 | ⭐⭐⭐⭐⭐ | ⭐⭐ | 专为多态类型设计 |
1. static_cast —— 最常用、相对安全的转换
✔ 用途
- 基本类型转换(如 int → double)
- 有继承关系的向上转型(Child* → Parent*)
- void* → T*(安全的 static 转)
- 调用显式构造函数
✔ 特性
- 编译期检查(不允许危险、不合理转换)
- 不能去 const
- 不能做不相关类型的指针互转(比如 int* → double*)
double d = static_cast<double>(5); // OK
Parent* p = static_cast<Parent*>(child_ptr); // 向上转换安全
void* vp = &d;
double* dp = static_cast<double*>(vp); // OK,static_cast 可用于 void*
❌ 错误示例(会编译失败)
int* ip = static_cast<int*>(some_double_ptr); // 不允许,不安全
一句话总结:
能用
static_cast的地方,就不用别的 cast,它最'正统'。

