在 C++ 中,“primary” 通常是指基本数据类型或者对象。类型转换(也称为类型强制或类型转换)是将一种数据类型转换为另一种数据类型的过程。在 C++ 中,有两种类型的类型转换:
int intValue = 42;
double doubleValue = intValue; // 隐式类型转换
显式类型转换:程序员明确指示编译器执行的类型转换。C++ 提供了以下几种显式类型转换方法:
静态类型转换(Static Cast):使用 static_cast<>
进行转换。这是最常用的显式类型转换方法。
float floatValue = 3.14f;
int intValue = static_cast<int>(floatValue); // 将浮点数转换为整数
动态类型转换(Dynamic Cast):使用 dynamic_cast<>
进行转换。这主要用于类层次结构中的转换,并在转换失败时返回空指针(对于指针类型)或抛出 std::bad_cast
异常(对于引用类型)。
class Base { virtual void foo() {} };
class Derived : public Base {};
Derived* derivedPtr = new Derived();
Base* basePtr = derivedPtr;
Derived* convertedPtr = dynamic_cast<Derived*>(basePtr); // 将基类指针转换为派生类指针
常量类型转换(Const Cast):使用 const_cast<>
进行转换。这用于修改类型的常量或易变性。
const int constIntValue = 42;
int* nonConstPtr = const_cast<int*>(&constIntValue); // 移除常量属性
重解释类型转换(Reinterpret Cast):使用 reinterpret_cast<>
进行转换。这种转换通常用于位模式的重新解释。
int intValue = 42;
int* intPtr = &intValue;
char* charPtr = reinterpret_cast<char*>(intPtr); // 将 int 指针转换为 char 指针
请注意,不正确地使用类型转换可能导致未定义行为、数据丢失或其他错误。因此,在进行类型转换时,请务必确保转换是安全的,并在必要时进行错误检查。