C++ 4 种具有更 为准确语义的新强制转换类型
1. static_cast<T>() 可用于把指向A 的指针强制转换为指向B 的指针,
其约束条件是类B必须是类A的子类。例如:
A *obj = new B;
B *b = static_cast<B *>(obj);
如果该对象不是B 的一个实例,那么使用结果指针将可以导致莫名其妙的系统崩溃。
2.dynamiolcast <T>()与static_cast <T>()类似,只是它使用的是运行时类型信息(RTTI,runtime
type information)的方法来验证与这个指针相关的对象obj是否是类B 的一个实例。如果不是,
强制转换就会返回一个空指针null. 例如:
A *obj = new B;
B *b = dynamic_cast<B *>(obj);
if (b)
b->someFunctionDeclaredInB() ;
在某些编译器中,dynamic_cast<T>()不能跨动态库工作。它也依赖于编译器对RTTI的支持,
但为了减小,可执行文件的大小,程序员可以关闭对RTTI的支持这一特色。
Qt过对Object的子类提供qobject_cast <T>()'来解决这些问题。T类必须是 QObject或者QObject子类继承而来的
3.const_cast<T>()添加或移除对指针或者引用的const 限定。
例如:
int MyClass::someConstFunction() const
{
if(isDirty()
{
MyClass *that = const_cast<MyClass *>(this);
that->recomputeInternalData();
}
在前面的例子中,我们舍弃了对this指针的const 限定,是为了调用非const成员函数recomputeInternalData();
(但不推荐这种做法,并且也通常可以通过使用mutable 关键字来避免这种做法。)
4、
reinterpre_cast<T>() 把任意类型的指针或者引用转换成任意的其他类型。例如:
short j = 0x1234;
if (reinterpret_cast<char &>(j) == oxl2)
std::cout << "The byte order is big-endian" << std::endl;
转载于:https://www.cnblogs.com/XiHua/p/4750219.html
C++ 4 种具有更 为准确语义的新强制转换类型相关推荐
- 一种基于语音识别的机器人语义识别系统的制作方法
本发明涉及机器人语义识别,尤其涉及一种基于语音识别的机器人语义识别系统. 背景技术: 目前,很多家庭都拥有机器人,但是很多时候机器人并不能准确识别用户对其发出的指示,使用户操作机器人不方便,这样的机器 ...
- 实现线程哪种方法更好_实施数据以实现更好的用户体验设计的4种方法
实现线程哪种方法更好 Gone are the days when design used to rely mainly on the color palettes and the creativit ...
- 知识问答(KBQA)两种主流方法:基于语义解析和基于信息检索的方法介绍
什么是知识问答 基于知识的问答是以知识库为认知源,在知识库的基础上回答自然语言问题. 知识库(KB)是一个结构化数据库,其中包含形式<主题,关系,对象>的事实集合,每个事实都可以随附所谓的 ...
- 5分钟NLP-知识问答(KBQA)两种主流方法:基于语义解析和基于信息检索的方法介绍...
来源:DeepHub IMBA 本文约1200字,建议阅读5分钟本文介绍了知识问答的两种主流方法. 什么是知识问答 基于知识的问答是以知识库为认知源,在知识库的基础上回答自然语言问题. 知识库(KB) ...
- Lora和Zigbee无线通讯技术的对比(哪种技术更适合物联网连接)
Lora和Zigbee无线通讯技术的对比(哪种技术更适合物联网连接) ZigBee是基于IEEE802.15.4标准的低功耗局域网协议,LoRa是LPWAN通信技术中的一种,那么lora技术和ZigB ...
- 用于道路场景实时准确语义分割的深度双分辨率网络
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 小白导读 论文是学术研究的精华和未来发展的明灯.小白决心每天为大家 ...
- 哪种营销方法效果最差_今日头条广告投放形式分几种?头条品牌营销曝光效果哪种广告更好?...
一.今日头条广告形式分几种? 所以,广告主们也想借助今日头条投放广告.那么,今日头条怎么投放广告?今日头条平台有三种投放广告形式,开屏广告.信息流广告.详情页广告: 1.开屏广告 该广告位可以让你的产 ...
- TypeScript和JavaScript哪种语言更先进
TypeScript和JavaScript哪种语言更先进 近两年来最火爆的技术栈毫无争议的是JavaScript,随着ES6的普及,不管是从前端的浏览器来看,还是后端的NodeJS场景,JavaScr ...
- jwt与token+redis,哪种方案更好用?
问:jwt与token+redis,哪种方案更好用? 其实JWT就是Json Web Token,就是Token的典型方式.题主的JWT和Token+Redis的区别,其实都是Token,只是JWT的 ...
最新文章
- Redis使用认证密码登录
- React 入门笔记 1
- Swift之Delegate/闭包
- CentOS8更换源后失败问题
- 【Python】参考ggplot2,Seaborn将迎来超大版本更新!
- SAP成都研究院姚瑶:软件质量保证工作的变迁
- Java 获取链表的元素
- fgets 和gets_C编程中的fgets()和gets()
- 深度学习自学(十):人脸检测android端-JNI调试调用底层检测识别库
- 拓端tecdat|R语言多元动态条件相关DCC-MVGARCH、常相关CCC-MVGARCH模型进行多变量股市波动率预测
- 泰山游记:晚上爬并无乐趣,什么也看不到
- iOS逆向:破解 APP防止dyld注入 的方法
- 【jzoj5053】【石子游戏】【搜索】
- KK课表抓取教务系统
- MindSpore21天实战营(2):基于BERT实现中文新闻分类实战
- 史上ElasticSearch 最全详细使用教程
- Fiddler功能讲解
- win10系统每天凌晨3点左右,自动关机重启
- 为什么程序员流动性大_为健康“流动”
- 如何快速启动wine安装的软件
热门文章
- 解读:百度官方公告对于6.22、6.28事件解释
- hbuilderx内置服务器启动失败_我们来看看Swoole是如何实现WebSocket服务器及客户端的...
- linux服务器进虚拟机,初次登录 Linux 服务器马上要做的 9 件事|Linux 中国
- Spring Cloud Config统一管理微服务配置
- ApplicationMaster启动流程
- (39)FPGA四种常用逻辑门(与非门)
- (36)System Verilog类中方法示例
- java中获取XML中的子xml_如何将子元素从XML提取到Java中的字符串?
- java按字节截取字符串牛客网_字符串计数
- 将GPIO外设挂到Cortex_M3 AHB总线上详细流程扩展外设步骤总结