标签:编译器 static 虚函数表 表示 运算 运算符 number 类型 操作
static_cast
reinterpret_cast
dynamic_cast
const_cast
1.**static_cast------运算符完成相关类型之间的转换**
使用场景:如在同一类层次结构中的一个指针类型到另一个指针类型,整型到枚举类型,或者浮点型到整型等。
例: 1, int m=10;
double n=static_cast < int > m;
2, int * q=static_cast < int* >(malloc(100));
2.**reinterpret_cast------处理互不相关类型之间的转换**
使用场景:如从整型到指针,一种类型的指针到另一种类型的指针等
例: int a=10;
double* b=reinterpret_cast<double*>(a); //b的转换结果为0x0000000a
3.**dynamic_cast------处理基类型到派生类型的转换**(这个说法不是很准确,为了好理解先这么写)
使用场景:基类必须有虚函数,即为多态时,可以转换
例:
class Base { public: virtual int test(){return 0;} //基类中存在虚函数,故在派生类中存在虚函数指针指向虚函数表。 }; class Derived:public Base { public: virtual int test(){return 1;} }; int main() { Base cbase; Derived cderived; Base *p1=new Base; Base *p2=new Derived; Derived* pD1=dynamic_cast<Derived*>(p1);//p1没有真正指向派生类,pD1置为0 Derived* pD2=dynamic_cast<Derived*>(p2); //正确 //Derived& pd1=dynamic_cast<Derived&>(*p1);//p1没有真正指向派生类,pd1抛出异常 Derived& pd2=dynamic_cast<Derived&>(*p2);//正确 return 0; }
4,const_cast用来移除变量的const或volatile限定符。
一句话:强制去掉const(或volatile) 必须使用const_cast 。
标签:编译器 static 虚函数表 表示 运算 运算符 number 类型 操作
原文地址:http://www.cnblogs.com/junlinfeizixiao/p/6193412.html