C++ 强制类型转换

在C++中,有四种强制类型转换:

1、static_cast:这是最常见的类型转换。它可以用于基本数据类型之间的转换,也可以用于指向父类和子类之间的指针或引用的转换。

static_cast可以实现下列转换:

①基本数据类型之间的转换。

②将任何类型转换为void类型。

③把空指针转换成目标类型的指针。

④用于类层次结构中基类和派生类之间指针或引用的转换。

⑤向上转换(派生类转换为基类)是安全的;向下转换(基类转换为派生类)没有动态类型检查,是不安全的。

例如:

int i = 10;
double d = static_cast(i);  // 整型转为浮点型

2、dynamic_cast:主要用于处理基类和派生类之间的转换。如果类型转换不安全,它会返回空指针NULL。这是唯一一种在运行时执行类型检查的转换。

例如:

Base *b = new Derived();
Derived *d = dynamic_cast(b);  // 基类指针转为派生类指针
if (d != nullptr) {
  // 转换成功
} else {
  // 转换失败
}

3、const_cast:这种类型转换用于修改常量对象的常量属性。需要注意的是,使用 const_cast 去掉常量性质并修改数据可能导致未定义的行为。

例如:

    int num = 100;
    const int* p1 = #
    //将常量指针转换为普通类型指针,去除const属性
    int* p2 = const_cast(p1);
    *p2 = 200;
    int a = 100;
    const int& ra = a;
    //将常量引用转换为普通类型引用,去除const属性
    int& ra1 = const_cast(ra);
    ra1 = 200;

注意:

const_cast<>只能用于转换指针或引用。

4、reinterpret_cast:这种类型转换允许进行任何指针或整型的转换。它可以将任何类型的指针转换为任何其他类型的指针,也可以将任何类型的指针转换

例如:

    char c = 'a';
    int d = reinterpret_cast(c);
    int* p=NULL;
    float* q = NULL;
    p = reinterpret_cast(q);
    q = reinterpret_cast(q);

注意:

reinterpret_cast要转换的类型必须是指针类型、引用或算术类型。

你可能感兴趣的:(C++,c++,开发语言)