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数据,哪种模型更合适 决 ...
 
随机推荐
- 003-spring cache-JCache (JSR-107) annotations
			
参看地址:https://docs.spring.io/spring/docs/current/spring-framework-reference/integration.html#cache-js ...
 - Controller中返回数据总结(ResponseEntity,@ResponseBody,@ResponseStatus)
			
在传统的开发过程中,我们的控制CONTROLLER层通常需要转向一个JSP视图:但随着WEB2.0相关技术的崛起,我们很多时候只需要返回数据即可,而不是一个JSP页面. ResponseEntity: ...
 - [SharpMap] 屏幕坐标和Map坐标转换
			
1. SharpMap中屏幕坐标和地图Map坐标转换: using System.Drawing; using GeoAPI.Geometries; namespace SharpMap.Utilit ...
 - python基础(基础数据类型)
			
一. 引子 1. 什么是数据 x=10,10是我们要存储的数据 2. 为何数据要分不同的类型 数据是用来表示状态的,不同的状态就应该用不同的类型的数据去表示 3.数据类型 数字 字符串 列表 元组 字 ...
 - springboot中的常用注解
			
springboot中的常用注解个人觉得springboor中常用的注解主要可以分为三种:放入容器型注解.从容器中取出型注解和功能型注解.其中的放入容器型和从容器中取出型就是我们平时所说的控制反转和依 ...
 - VS2010/MFC编程入门之二十五(常用控件:组合框控件Combo Box)
			
上一节鸡啄米讲了列表框控件ListBox的使用,本节主要讲解组合框控件Combo Box.组合框同样相当常见,例如,在Windows系统的控制面板上设置语言或位置时,有很多选项,用来进行选择的控件就是 ...
 - P1174 打砖块
			
P1174 打砖块 普通分组背包:50pts 题解说的啥????(大雾) 看了半天 $s[0/1][i][j]$表示第$i$列用$j$发子弹,最后一发是1/否0打在该列上的价值 $f[0/1][i][ ...
 - 20145307陈俊达《网络对抗》Exp3 免杀原理与实践
			
20145307陈俊达<网络对抗>Exp3 免杀原理与实践 基础问题回答 杀软是如何检测出恶意代码的? 恶意代码中一般会有一段有较明显特征的代码也就是特征码,如果杀毒软件检测到有程序包含的 ...
 - 实验四——使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
			
实验目的: 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 实验过程: 查看系统调用列表 get pid 函数 #include <stdio.h> #include & ...
 - [转]手机web HTML头信息解释和viewport meta标签解释
			
<meta charset="utf-8" /> <link rel="shortcut icon" href="favicon.i ...