C++ 中的四种类型转换(cast)

目录

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*

示例代码

打赏作者