博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
boost::implicit_cast
阅读量:6790 次
发布时间:2019-06-26

本文共 1134 字,大约阅读时间需要 3 分钟。

在C++中有四种类型转换

1、static_cast:这个是最经常使用的类型转换。凡是C++隐式执行的类型转换都能够用static_cast显式完毕。在隐式转换时有时编译器会有警告信息。可是显示转换就不会有。

2、const_cast:从名字能够看出和const有关,这个转换的作用是去除或加入const特性,它能够将一个const变量转换为非const变量,或将一个非const变量转换为const变量。

3、dynamic_cast:这个是执行时检查该类型转换是否安全。被转换的类型必须是多态(即有虚函数)。具体可參考

4、interpret_cast:interpret意思为又一次解释。意思为将数据的二进制格式又一次解释,它依赖机器。

在boost库中有个implicit_cast。这个表示“隐式”转换,即能够隐式转换的地方才干够用它。

以一个样例说明,在菱形继承中。最底层的对象能够转换为中层对象

#include
#include
class Top{};class MiddleA:public Top{};class MiddleB:public Top{};class Bottom:public MiddleA,public MiddleB{};void Function(MiddleA& A){ std::cout<<"MiddleA Function"<

这时假设编译,就会出现错误。由于在调用函数Function时。bottom既能够默认转换为MiddleA,也能够默认转换为MiddleB,假设不明白指出就会出现歧义。这时能够改为:

Function(static_cast
(bottom));

Function(static_cast
(bottom));

程序能够执行了。可是假设不小心这样使用了:

Top top;Function(static_cast
top);

这样编译能够通过,可是在执行时能够崩溃。由于top不是“一种”MiddleB。可是编译器不能发现这个问题。这时假设用implicit_cast就不会有这个问题了,在编译时就会给出错误信息。

在转换时up-cast不会有问题,由于派上类就是一种基类。它包括基类全部信息。可是基类不是一种派上类。假设down-cast就可能有问题。

static_cast比較强大,能够执行上述两种转换。

可是implicit_cast比較弱一点,仅仅能执行up-cast。

转载地址:http://jnogo.baihongyu.com/

你可能感兴趣的文章
研发人员开发出一套硬件级别的后门技术
查看>>
电力“十三五” 光伏分布式6000万千瓦迎来机遇
查看>>
高桥洋接任索尼中国总裁:索尼营销第一人
查看>>
知乎iOS客户端下午瘫了 原来是第三方防火墙变更害的
查看>>
为什么亚马逊公司的Alexa将无处不在
查看>>
监控工程中,如何选择光纤的种类和芯数
查看>>
“小病进社区,大病进医院”难吗?
查看>>
央视:快递单成你我“泄密单” 快递员成信息泄露元凶
查看>>
做好智慧农业需从农业物联网普及开始
查看>>
从4G到5G,从物联网到云计算 通信的下一个引爆点在哪里?
查看>>
社交战争下半场:从流量战到内容战
查看>>
谈谈中小企业ERP实施的现状
查看>>
注意!LTE正在进入IoT领域
查看>>
2017年视频会议市场将达4.912亿美元
查看>>
ARM借助微软进军服务器市场
查看>>
FBI又想查看苹果服务器了: 这一次是iCloud
查看>>
《Web应用漏洞侦测与防御:揭秘鲜为人知的攻击手段和防御技术》——1.6 杂七杂八...
查看>>
《机器人爱好者(第2辑)》——新型警用和安保机器人
查看>>
《技术的潜能:商业颠覆、创新与执行》一一1.5替代能源
查看>>
《R语言与数据挖掘最佳实践和经典案例》—— 2.4 通过ODBC导入与导出数据
查看>>