在C++中,强制类型转换是用于将一种数据类型的值转换为另一种数据类型的操作,可以通过四种不同的方式进行实现。
- 静态转换(static_cast):可用于转换具有父子关系的类指针或引用之间的类型,也可用于将同类型的非常量变量或指针转换为其他类型。
double d = 10.5;
int i = static_cast<int>(d); // 将 double 类型的 d 转换成 int 类型的 i
- 动态转换(dynamic_cast):用于在运行时处理多态性。它确保向下转换的安全性,即只能从基类指针或引用向派生类指针或引用进行转换。
class Base {public: virtual void foo() {}};
class Derived : public Base {};
Base* base_ptr = new Derived;
Derived* derived_ptr = dynamic_cast<Derived*>(base_ptr); // 将 Base 类型的指针转换成 Derived 类型的指针
- 重新解释转换(reinterpret_cast):用于执行无关类型之间的转换,不进行任何类型检查。通常用于将指针转换为整数或将整数转换为指针。
int value = 10;
char* ch_ptr = reinterpret_cast<char*>(&value); // 将 int 类型的 value 的地址强制转换为 char* 类型的指针
- 常量转换(const_cast):用于删除常量属性并将其转换为非常量数据。仅适用于指针或引用类型。
const int a = 100;
int& b = const_cast<int&>(a); // 将 const int 类型的 a 转换成 int& 类型的 b
请注意,强制类型转换可能导致数据丢失和不安全的操作,并应谨慎使用。建议在转换之前先检查要转换的变量是否符合转换目标的范围和类型。