C++的四种类型转换各司其职:static_cast用于安全的静态类型转换,如基本类型转换和上行转型;dynamic_cast通过运行时类型检查实现安全的下行转型,适用于多态类型;const_cast唯一能添加或移除const/volatile属性,但修改真正const对象属未定义行为;reinterpret_cast进行低级指针重解释,类型安全最弱,仅用于特定底层场景。它们共同在保证类型安全的前提下提供精确控制,替代C风格强制转换。

类型转换在C++中是家常便饭,但用对了是神器,用错了就是埋雷。C++提供了四种显式类型转换,它们各有千秋,适用场景也不同。简单来说,就是
static_cast
dynamic_cast
const_cast
reinterpret_cast
static_cast、dynamic_cast、const_cast、reinterpret_cast
C++是强类型语言,类型安全非常重要。但有时候,我们确实需要在不同类型之间进行转换。C风格的强制类型转换虽然简单粗暴,但缺乏类型检查,容易出错。这四种类型转换,就是为了在类型安全的前提下,提供更精细的控制。它们让编译器能够进行更多的静态类型检查,减少运行时错误的可能性。
这四种类型转换的使用方式如下:
立即学习“C++免费学习笔记(深入)”;
static_cast
int
float
dynamic_cast
const_cast
const
const
const
reinterpret_cast
static_cast
static_cast
int
float
float
int
void*
static_cast
const
volatile
__unaligned
int*
float*
示例:
int i = 10;
float f = static_cast<float>(i); // int to float
class Base {};
class Derived : public Base {};
Base* basePtr = new Derived();
Derived* derivedPtr = static_cast<Derived*>(basePtr); // downcast, be careful!
void* voidPtr = &i;
int* intPtr = static_cast<int*>(voidPtr); // void* to int*dynamic_cast
dynamic_cast
dynamic_cast
具体来说,当
dynamic_cast
std::bad_cast
dynamic_cast
static_cast
dynamic_cast
示例:
class Base { public: virtual ~Base() {} }; // 必须有虚函数,否则dynamic_cast无法使用
class Derived : public Base {};
Base* basePtr = new Derived();
Derived* derivedPtr = dynamic_cast<Derived*>(basePtr); // 安全的 downcast
if (derivedPtr) {
// 转换成功,可以使用 derivedPtr
} else {
// 转换失败,basePtr 实际指向的不是 Derived 对象
}const_cast
const_cast
const
volatile
const
const
const
使用场景:
const
const
const_cast
const
const
const
const
const
const_cast
const
潜在风险:
const
const
const_cast
示例:
const int constant = 21;
int* changeable = const_cast<int*>(&constant);
*changeable = 7; // 未定义行为!
void printValue(const int* value) {
std::cout << *value << std::endl;
}
int nonConst = 10;
printValue(const_cast<const int*>(&nonConst)); // 添加 const 属性reinterpret_cast
reinterpret_cast
int*
float*
reinterpret_cast
reinterpret_cast
应该在什么情况下使用
reinterpret_cast
reinterpret_cast
reinterpret_cast
reinterpret_cast
示例:
int i = 10; float* f = reinterpret_cast<float*>(&i); // 非常危险! typedef void (*FuncPtr)(); FuncPtr func = reinterpret_cast<FuncPtr>(&i); // 更危险!
总而言之,
reinterpret_cast
reinterpret_cast
以上就是如何在C++中进行类型转换_C++四种类型转换详解的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号