欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C++中四种类型转换的关键字介绍及实例讲解

程序员文章站 2022-12-11 11:35:15
C++中四种类型转换的关键字分别为: static_cast、dynamic_cast、const_cast、reinterpret_cast 1.reinterpret_ca...

C++中四种类型转换的关键字分别为:

static_cast、dynamic_cast、const_cast、reinterpret_cast

1.reinterpret_cast

该函数将一个类型的指针转换为另一个类型的指针。

这种转化不用修改指针变量值存放格式(不改变指针变量值),只需在编译时重新解释指针的类型就可以做到。
reinterpret_cast可以将指针值转换为一个整型数,但不能用于非指针类型的转换。

//基本类型指针的类型转换
double d=9.2;
double *pd=&d;
int *pi=reinterpret_cast(pd);//等同于int *pi=(int*)pd;

//不相关的类的指针的类型转换
class A{};
class B{};
A* pa=new A;
B* pb=reinterpret_cast(pa);//等同于B* pb=(B*)pa;

//指针转换为整数
long l=reinterpret_cast(pi);//等同于long l=(long)pi;

2.const_cast

该函数用于去除指针变量的常量属性,将它转化为一个对应指针类型的普通变量。也可以将一个非常量的指针变量转化为一个常指针变量。

这种转换是在编译期间做出的类型更改。

const int *p1=0;
int *p2=const_cast(p1);//相当于int *p2=(int*)p1;

const A* p3=new A;
A* p4=const_cast(p3);//相当于A* P4=(A*)p3;

处于安全考虑,const_cast无法将非指针的常量转换为普通变量。

3.static_cast

该函数主要用于基本类型之间和具有继承关系之间的转换。

这种转换一般会更改变量的内部表示方式,所以,static_cast用于指针类型转换没有太大意义。

//基本类型转换
int i=0;
double d=static_cast(i);//等同于double d=(double)i;

//转换继承类的对象为基类对象
class Base{};
class Derived:public Base{};
Derived d;
Base b=static_cast(d);//等同于Base b=(Base)d;

4.dynamic_cast

与static_cast相对,是动态转换。

在运行时进行转换分析的,并非在编译时进行。

该函数只能在继承类对象的指针之间或引用之间进行类型转换。进行转换时,会根据当前运行时类型信息,判断类型对象之间的转换是否合法。

dynamic_cast指针转换失败,可通过是否为NULL检测,引用转换失败则抛出一个bad_cast异常。

class Base{};
class Derived : public Base{};

//派生类指针转换为基类指针
Derived *pd=new Derived;
Base *pb=dynamic_cast(pd);

if(!pb)
  cout<<"类型转换失败"<(pa);

若对无继承关系或没有虚函数的对象指针进行转换、基本类型指针转换以及基类指针转换为派生类指针,都不能通过编译。

*>*>