C++风格的类型转换操作符与C风格的强制类型转换
- int nVar=0xab65;
- char cChar=char (nVar);
- 用于类层次结构中基类和子类之间指针或引用的转换。
- 进行上行转换(把子类的指针或引用转换成基类表示)是安全的;
- 进行下行转换(把基类指针或引用转换成子类表示)时,由于没有动态类型检查,所以是不安全的。
- 用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换的安全性也要开发人员来保证。
- 把空指针转换成目标类型的空指针。
- 把任何类型的表达式转换成void类型。
- static_cast 在编译时使用类型信息执行转换,在转换执行必要的检测(诸如指针越界计算, 类型检查),其操作数相对是安全的。reinterpret_cast 仅仅是重新解释了给出的对象的比特模型而没有进行二进制转换, 如:
- int n=9;
- double d=static_cast < double > (n);
上面的例子中, 我们将一个变量从 int 转换到 double。 这些类型的二进制表达式是不同的。 要将整数 9 转换到 双精度整数 9,static_cast 需要正确地为双精度整数 d 补足比特位。其结果为 9.0。而reinterpret_cast 不会有这样的操作。
- 在一类东西都可以转, 但是不是一类的就不能转。即, 语义上说不通的, 两个完全不同的数据类型 static_cast 是拒绝工作的。比如你想把一个指针转成浮点数。
- dynamic_cast用于一颗类继承树上转换时,将利用 RTTI 在运行时检查。一般用于下行转换,即将基类指针转换为派生类指针。比如,
- class A {};
- class B : public A {};
- A* a=new B();
这时, 可以用 dynamic_cast 做 类型转换, 把 a 转成 B*。和 static_cast 不同, dynamic_cast 会检查一下 a 到底是不是指向一个B,如果转不了, 将返回一个 NULL。所以,这种情况下dynamic_cast比static_cast更严格更安全,但执行效率上比static_cast要差。
- reinterpret_cast 比 static_cast 更接近 C 的强制转换。它可以实现看起来没关系的两种类型的转换,当然它比 static_cast 危险。
www.wabaoer.com
www.lrznet.com
www.37fa.cn
www.ymsb.net
www.haoym.net
www.foodseo.cn
www.equban.com
www.qqphp.cn
wanwu.foodseo.cn
www.di114.cn
jingyou.di114.cn
- int a = 7;
- double* p1 = (double*) &a; // ok(但指向的并非 double 类型的对象)
- double* p2 = static_cast<double *>(&a); // 错误
- double* p2 = reinterpret_cast<double *>(&a); // ok:我真的想这么干
- const int c = 7;
- int* q1 = &c; // 错误
- int* q2 = (int*)&c; // ok(但 *q2=2; 仍然是不合法的代码,而且有可能失败)
- int* q3 = static_cast<int *>(&c); // 错误:static_cast 不能去除 const 属性
- int* q4 = const_cast<int *>(&c); // 我的确想这么干
转载于:https://blog.51cto.com/lrznet/585284
C++风格的类型转换操作符与C风格的强制类型转换相关推荐
- C++ 类型转换 :C语言的类型转换、C++的四种强制类型转换、explicit
文章目录 C语言中的类型转换 隐式类型转换 显式类型转换 C++ 强制类型转换 static_cast reinterpret_cast const_cast dynamic_cast explici ...
- linux 强制类型转换,C++ 新标准下的强制类型转换详解
使用标准C++的类型转换符:static_cast.dynamic_cast.reinterpret_cast和const_cast. static_cast 用法:static_cast (expr ...
- java object强制类型转换_scala object 转Class Scala强制类型转换
asInstanceOf[T] 将对象类型强制转换为T类型. 还是由于泛型存在类型擦除的原因,1.asInstanceOf[String]在运行时会抛出ClassCastException异常,而Li ...
- C++ 四种类型转换操作符
在c++中进行类型转换只需要在变量前加上变量类型,并且转换是双向的. 例如: int i = 0: double d = 1.9:int i1 = (int) d: double d1 = (doub ...
- 谁说 C++ 的强制类型转换很难懂?
作者 | 樱雨楼 责编 | 屠敏 出品 | CSDN(ID:CSDNnews) 在上篇与中篇中,我们讨论了隐式类型转换及其与函数重载之间的相关话题.本篇将要讨论的即为类型转换的另一大分支--强制类型转 ...
- C++ 四种强制类型转换
C++ 类型转换(C风格的强制转换): 在C++基本的数据类型中,可以分为四类:整型,浮点型,字符型,布尔型.其中数值型包括 整型与浮点型:字符型即为char. (1)将浮点型数据赋值给整型变量时,舍 ...
- C++中的向上类型转换和向下类型转换+四种强制类型转换
转自博客:http://blog.csdn.net/wangweitingaabbcc/article/details/7720979# 在c++的世界中有这样两个概念,向上类型转换,向下类型转换,分 ...
- C/C++ 之 C++强制类型转换(static_cast、dynamic_cast、const_cast、reinterpret_cast)
文章转载自:https://www.cnblogs.com/chenyangchun/p/6795923.html .在了解这块时,发现了这篇文档,感觉写的很不错! c强制转换与c++强制转换 c 语 ...
- char强制类型转换为int_为强制类型转换正名
为强制类型转换正名www.yexiaochen.com 引子 强制类型转换是JavaScript开发人员最头疼的问题之一, 它常被诟病为语言设计上的一个缺陷, 太危险, 应该束之高阁. 作为开发人员 ...
最新文章
- mysql 列累加计算
- oracle中值集限定词为灰色,《Oracle从入门到精通》读书笔记第四章 SQL语言基础之一...
- 中国甲真菌病药物行业市场供需与战略研究报告
- 中国接种环行业市场供需与战略研究报告
- docker使用国内仓库
- kotlin中的异常处理_Kotlin异常处理
- 深入理解Angular2变化监测和ngZone
- FT5X06 如何应用在10寸电容屏
- ICMP(网际控制报文协议)
- FPGA STA(静态时序分析)
- abaqus如何并行计算_Abaqus软件与并行计算的硬件配置
- 根据开始日期,结束日期,计算出日历上有几周的方法
- 开机预读快还是不预读快_启用预读为网页浏览提速
- 大童保险发生工商变更:安信信托彻底退出,德弘资本晋升为大股东
- poj 2044 weather forcast
- 报错Cannot mix different versions of joi schemas解决方法
- 四点之间最短路(spfa+优先队列+枚举优化)UESTC1955喜马拉雅山上的猴子
- 感谢十二年的陪伴——分享回归,不忘初心(Eastmount博客总结及未来规划)
- java minma_Java Core.minMaxLoc方法代码示例
- Android StatusBar 黑底白字