C++中四种强制类型转换的区别
static_cast:用法static_cast<type>(old)将old转换成type类型(可以是类类型,基本类型之间的转换),但没有运行时类型检查来保证安全性,基类不需要有虚函数,当把派生类转化成基类指针类型时,是安全的,但把基类转化成派生类时,不会进行动态类型检查
注意: static_cast不能转换掉expression的const、volitale或者_unaligned属性
dynamic_cast:用法dynamic_cast<type>(old),type必须是类的指针、类的引用或者void*基类必须有虚函数,否则编译不过,而static_cast 没有这个要求,当利用dynamic_cast把基类转化成派生类类型时,会动态检验操作是否安全,如对派生类的成员函数showbook访问
注意: static_cast不能转换掉expression的const、volitale或者_unaligned属性
reinterpret_cast:用法reinterpret_cast<type>(expression),转换一个指针为其他类型的指针,也允许将一个指针转换为整数类型,反之亦然。这个操作符能够在非相关的类型之间进行转换,如两个不相关的类之间,或者普通类型之间的转换。慎用
注意: static_cast不能转换掉expression的const、volitale或者_unaligned属性
const_cast:用法const_cast<type>(old),type必须是指针,引用或者类的对象(利用引用,否则会出现析构两次对象),这个类型操纵传递对象的const属性,或者是设置或者是移除