Static_const类似于C语言的强制转换操作符(),不进行运行时安全检查,多用于非多态类型之间相互转换,如int到double等,也可用于基类与派生类之间的相互转换,从派生类指针转为基类指针时是安全的,反之由于不存在安全检查,可能会出现安全问题;如果不同类(也不是派生类与基类关系)转换,会出现编译错误;
Dynamic_cast用于基类和派生类(只能用于指针和引用,且须包含虚函数)之间的转换,会进行安全检查,如果转换指针失败返回0(null),引用转换失败抛回bad_cast(static_cast会成功得到一个指向基类对象的派生类指针,操作出错的危险),此外,被转换的对象(指针)需要有虚函数(因为类型信息存储在虚函数中),否则会出错;如果是不同类型之间进行转换,指针得到的结果也是null,引用返回bad_cast;
Reinterpret_cast没有实际逻辑意义,只对相应存储空间中的数据的含义做另一重解释,如int *n= new int;double *d=reinterpret_cast<double*> (n);结果只是使得d指向n所指空间,将之用double的方式解释;
Const_cast用以去除对象的const或者volatile属性,如常量指针/引用转换为非常量指针/引用,但是依旧指向原来的对象,常常用在需要非常量参数的函数中,转换后,可通过指针/引用对所指对象进行修改;int a=3; const int * b = & a; int * c = const_cast<int * >(b); * c = 4; cout<<a<<*c;这时输出两个4,如果不使用const_cast转换符则常量指针*c的值是不能改变的
关于C++四种转换,可参见博文:http://blog.csdn.net/meimeng515/article/details/6902063 和 http://liuxiaowei199001.blog.163.com/blog/static/1938053252011824101529159/