C++中的四种类型转换:const_cast、static_cast、dynamic_cast、reinterpret_cast;
const_cast:
- 去掉对应的const属性,比如const变量转为非const变量,const指针转非const指针。
static_cast:
- 用于各种隐式转换,比如C++基本数据类型之间的转换、非const转const、void*转指针等,static_cast能用于多态中派生类向基类的转换;基类向派生类转换时,因为static_cast没有运行时类型检查,所以是不安全的。
dynamic_cast:
- 用于动态类型转换。
- 只能用于含有虚函数的类,在类层次间的向上和向下转化。
- 只能用于转指针或引用。
- 向下转化时,如果是非法的,指针返回0,引用抛出异常。
reinterpret_cast:
- 几乎什么类型都可以转,但是可能会出问题,尽量少用;
为什么不用C的强制类型转换?
- C的强制类型转换表面上功能强大,什么都能转,但是转化不够明确,不能进行错误检查。
参考:
向上转换:子类向基类的转换;
向下转换:基类向子类的转换;