C++的类型转换分为隐式转换和显式转换
隐式转换举例:
int i=4;
double d=i;//隐式转换
显式转换分为四种:reinterpret_cast,static_cast,const_cast,dynamic_cast
一、reinterpret_cast
主要用途:指针重新解释,可以用于简单类型指针之间、无继承关系的类指针,也可以将指针解释为简单类型。
例如:
1、简单类型指针之间转换
int i=0;
int *pi = &i;
double *pd = reinterpret_cast<double *> (pi);
2、无继承关系的类指针之间
classA cA = new classA();
classA *pcA = &cA;
classB *pcB = reinterpret_cast<classB *> (pcA);
3、指针解释为简单类型
long ld = reinterpret_cast<long > pi;
二、static_cast
主要用途:简单类型转换,具有继承关系的对象之间转换
1、简单类型转换
long ld=10;
int i =static_cast<int> (ld);
2、具有继承关系的对象之间转换
class A{};
class B:public A{};
B b;
A a = static_cast<A> (b);
三、const_cast
主要用途:去掉/增加指针变量的const属性
四、dynamic_cast
主要用途:用于运行时类型检查,比如一个用基类指针或引用表示的对象,有可能是基类对象,也有可能是继承类对象,通过dynamic_cast进行转换,根据转换结果可判断实际类型,然后再进行进一步操作。