目录
内容目录
static_cast
动机
在 C++ 引入之前,C 语言的转换是通过简单的类型转换实现的,这种转换既不安全也不明确。C++ 中引入 static_cast 的动机是提供一种在编译时就能检测到的安全类型转换方式。它用于那些不需要运行时类型检查的场景,例如基本数据类型之间的转换,或在类层次结构中进行明确且安全的向上转型。
例子
float f = 3.5;
int i = static_cast<int>(f); // 将 float 转换为 int
dynamic_cast
动机
主要用于在继承层次结构中的对象的指针或引用。它在运行时进行检查以确保向下转型的有效性。如果转换不成功,它会对指针返回 nullptr,对引用抛出异常。
例子
Base* b = new Derived();
Derived* d = dynamic_cast<Derived*>(b); // 安全的向下转型
const_cast
动机
用于添加或移除变量的 const 限定符。它是唯一可以改变表达式常量性的转换。
例子
const int x = 10;
int* y = const_cast<int*>(&x); // 移除常量性
reinterpret_cast
动机
最危险的转换,用于低级编程中的直接内存操作和类型解释,提供几乎任何类型的指针转换。使用时需要极度小心,因为它可能导致平台特定的、难以调试的错误。
例子
int* p = new int(65);
char* ch = reinterpret_cast<char*>(p); // 将 int* 解释为 char*
打赏作者