在C++中有四种命名强制类型转换:const_cast、static_cast、dynamic_cast和reinterpret_cast。对C++中的强制类型转换讲得比较清楚。
1. const_cast
const_cast用于将const类型转换为非const类型,例如:
const char *str = "hello";char *p = const_cast(str);
2. static_cast和dynamic_cast
这两种cast功能相似,但是static_cast没有动态检查的功能,而dynamic_cast有动态检查的功能。
3. reinterpreter_cast
例子:
int a;char *c = reinterpret_cast(a);
4. 一个小例子的分析
class A{ int a;public: A(){ a = 0; }};class AA:public A{ int aa;public: AA(){ aa = 0; } virtual int get_aa(){ //如果没有这个虚函数,那么下面的dynamic_cast无法编译通过 return aa; }};class B{ int b;public: B(){ b = 0; }};int main(){ A *x; AA *y; B *z; static_cast(y); //向上转换 //static_cast(y); //无法编译通过 dynamic_cast(y); //运行时转换的结果是NULL reinterpret_cast(x); //reinterpret_cast比较粗暴 return 0;}
设计得当的话,强制类型转换是可以避免的。应当尽量不要使用强制类型转换。