C++:强制类型转换

隐式类型转换是安全的,显式类型转换是有风险的。

static_cast

"静态转换",也就是在编译期间转换,转换失败的话会抛出一个编译错误。

const_cast

将 const/volatile 类型转换为非 const/volatile 类型。

reinterpret_cast

仅仅是对二进制位的拷贝,不会借助已有的转换规则对数据进行调整。reinterpret_cast 可以认为是 static_cast 的一种补充,一些 static_cast 不能完成的转换,就可以用 reinterpret_cast 来完成。

dynamic_cast

其他三种都是编译时处理的,dynamic_cast是在运行时处理的,运行时要进行类型检查。

不能用于内置的基本数据类型的强制转换。

转换成功的话返回指向类的指针或引用,转换失败的话,则返回NULL。

使用dynamic_cast转换时,基类中一定要有虚函数,否则编译不通过。
原因:类中存在虚函数,就说明它有可能想要让基类指针指向派生类对象,此时转换才有意义。由于运行时类型检查需要类型信息,而这个信息存储在类的虚函数表中。

向上转型时,dynamic_cast和static_cast效果一样;向下转型时,dynamic_cast具有类型检查功能,比static_cast更安全。

原文链接: https://www.cnblogs.com/xiaobaizzz/p/12442383.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    C++:强制类型转换

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/334110

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月1日 下午9:30
下一篇 2023年3月1日 下午9:30

相关推荐