转型一直不陌生,在java里面用的也比较多,直接"()"一下就搞定了,在C++中,部分转型也可以直接用这种方法搞定,在effective c++中,作者将其归纳为旧式转型。
既然有旧式,那就有新式,新式是形如xx_cast的东西。cast比较纠结,虽然平常用的也还算多,但一直没总结,也就老忘了各自区别和具体用法,接下来大概总结一下。
- const_cast
用来移除对象的常量性(是移除!不是添加),也是唯一具有此功能的转型操作符(C++style)。
- dynamic_cast
用来执行安全向下转型操作,也可以用来判断某个对象是否为另一个对象的派生类。旧式语法无法执行这个操作,缺点是耗费的运行成本比较高。
- static_cast
用来强制隐式转换,如将non-const转为const、将int转为double等。
- reinterpret_cast
用来处理无关类型之间的转换,它会产生一个新的值,这个值会和原始参数有着完全相同的比特位。几乎任何类型的指针之间都可以互相转换,都不会编译错误,但是使用它很容易导致程序的不安全,只有将转换后的类型值转换回到其原始类型,这才是正确使用reinterpret_cast方式。
- (Effective C++中说这个方法一般是在高级语法中才出现,且在目前公司项目中也没看到相应应用,暂时性忽略一下,了解就好)
时间: 2024-10-10 00:31:08