C++中四种类型转换的关键字介绍及实例讲解
程序员文章站
2023-12-25 12:28:27
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);
若对无继承关系或没有虚函数的对象指针进行转换、基本类型指针转换以及基类指针转换为派生类指针,都不能通过编译。
*>*>