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;
C++ 4 种具有更 为准确语义的新强制转换类型的更多相关文章
- web前端开发培训和自学 哪种选择更适合你
web前端相对于其他软件开发是比较容易入门的,但是如果深入学习就比较困难了,这门技能需要从业人员掌握一定的设计.代码.交互技能和一些SEO技能,容易入门还涉及这么多知识和技能,那学习web前端开发到底 ...
- RAID5和RAID10,哪种RAID更适合你(上)
[IT168 专稿]存储是目前IT产业发展的一大热点,而RAID技术是构造高性能.海量存储的基础技术,也是构建网络存储的基础技术.专家认为,磁盘阵列的性能优势得益于磁盘运行的并行性,提高设备运行并行度 ...
- TypeScript和JavaScript哪种语言更先进
TypeScript和JavaScript哪种语言更先进 近两年来最火爆的技术栈毫无争议的是JavaScript,随着ES6的普及,不管是从前端的浏览器来看,还是后端的NodeJS场景,JavaScr ...
- 异步编程的两种模型,闭包回调,和Lua的coroutine,到底哪一种消耗更大
今天和人讨论了一下CPS变形为闭包回调(典型为C#和JS),以及Lua这种具有真正堆栈,可以yield和resume的coroutine,两种以同步的形式写异步处理逻辑的解决方案的优缺点.之后生出疑问 ...
- 阅读:RAID5和RAID10,哪种RAID更适合你
阅读:RAID5和RAID10,哪种RAID更适合你-------------------------------------------2013/10/06 存储是目前IT产业发展的一大热点,而RA ...
- python中的静态方法、类方法、属性方法(福利:关于几种方法更好的解释)
该部分的三个属性都是高级方法,平时用的地方不是很多 一.静态方法 静态方法的使用不是很多,可以理解的就看一下,用的地方不是很多 class Dog(object): def __init__(self ...
- 哪种写法更好?<script></script> vs/or <script type=”text/javasript”></script>
一直很奇怪 哪种写法更好<script type=“text/javascript”>…</script> or <script>…</script>? ...
- 转载:RAID5和RAID10,哪种RAID更适合你
转自 http://storage.it168.com/h/2007-06-28/200706281204046_3.shtml 存储是目前IT产业发展的一大热点,而RAID技术是构造高性能.海量存储 ...
- R_针对churn数据用id3、cart、C4.5和C5.0创建决策树模型进行判断哪种模型更合适
data(churn)导入自带的训练集churnTrain和测试集churnTest 用id3.cart.C4.5和C5.0创建决策树模型,并用交叉矩阵评估模型,针对churn数据,哪种模型更合适 决 ...
随机推荐
- 4.12 Routing -- Preventing And Retrying Transitions
一.概述 在一个路由的跳转过程中,Ember路由器传递一个跳转对象到被跳转调用的路由的不同的hooks中.任何一个hook获取这个跳转对象,有能力通过调用transition.abort()终止跳转, ...
- c#将十进制转64进制
//由于用于文件命名,所以将64位中的+转换为=,/转换为_ static char[] digits = { '0' , '1' , '2' , '3' , '4' , ' ...
- [LeetCode]206. Reverse Linked List(链表反转)
Reverse a singly linked list. click to show more hints. Subscribe to see which companies asked this ...
- Git: A分支上的commit提交到B分支上
1. 执行git log -3 --graph A,查看A分支下的commit: 注:commit 后面的hash值代表某个commit,这里把”82f1fb7138c5860cc775b4b5ea7 ...
- HDU1978How Many Ways 记忆化dfs+dp
/*记忆化dfs+dp dp[i][j]代表达到这个点的所有路的条数,那么所有到达终点的路的总数就是这dp[1][1]加上所有他所能到达的点的 所有路的总数 */ #include<stdio. ...
- Linux 笔记 #01# 搭建 Python 环境 & vim 代码高亮
日常收集 vim editor: How do I enable and disable vim syntax highlighting? 搭建 Python 环境 vim editor: How d ...
- Django:用户登录实例
Django:用户登录实例 一.源代码 1,login.html代码(登录界面): <!DOCTYPE html> <html lang="zh-CN"> ...
- Python安装安装.whl包(安装pylint)
Python安装安装.whl包(安装pylint) Pylint 是一个 Python 代码分析工具,它分析 Python 代码中的错误,查找不符合代码风格标准和有潜在问题的代码. 1,,下载.whl ...
- Ubuntu安装 jdk.rpm 报错问题解决
报错问题出现原因 第一次使用Ubuntu操作系统,很多命令及软件安装方式与以往使用的Linux操作系统(CentOS)有很大区别.现在总结使用Ubuntu在安装JDK中,遇到的问题及解决方法. roo ...
- FromBottomToTop第十一周项目博客
FromBottomToTop第十一周项目博客 项目内容 塔防游戏 大体就是在地图上以合理阵型建设防御炮塔来阻止小怪进入我方阵地.玩家需用现有的金币进行炮台建设或升级,金币数可根据打怪个数增加.入侵的 ...