类型转换是一种让程序猿可以临时或永久性改变编译器对对象的解释机制。可改变对象解释方式的运算符称为类型转换运算符。

为何须要进行类型转换

通常为了实现使用不同环境的个人和厂商编写的模块可以相互调用和协作,程序猿须要让编译器依照所需的方式解释数据,并成功编译和运行。一个非常经典的样例是:眼下非常多C++程序依旧在使用非常多年前用C编写的库。而针对这些C语言编译器编写的库必须依赖整形来保存布尔值,因此对于这些编译器来说。bool类型的定义就类似于:

typedef unsigned short BOOL,返回布尔值的函数可能这样声明:BOOL IsX()

而C++编译器支持bool,单位false和true。假设在新的C++应用程序中使用这种库,程序猿必须让其使用的C++编译器可以理解数据类型bool,同一时候让库可以理解数据类型bool,因此,可使用类型转换:bool bCPPResult = (bool) IsX();非常明显这是C风格类型转换。而纯粹的C++语法论者觉得这种转换不伦不类,推崇纯粹的C++风格类型转换。

C++ 类型转换运算符

static_cast。dynamic_cast,reinterpret_cast。const_cast

全然同样的语法:destination_type result = cast_type <destination_type>(object_to_be_casted)

static_cast :

静态类型转换,实现编译阶段检查。确保指针转换为相关类型。可用于相关类型的指针之间进行转换,还可显式地执行标准数据类型的类型转换。在C语言中可将一个对象的指针转换为全然不相关的类型,而编译器不会报错。而是用static_cast则会对指针相关性进行检查,假设不相关,则编译器会报错。同一时候static_cast能够实现指针向上转换为基类类型。向下转换为派生类型,但不会在执行阶段执行检查。

而通常向下转换为派生类型时,在执行阶段会有可能导致意外结果。因此便有了以下的动态类型转换。

dynamic_cast:

动态类型转换,在执行阶段执行类型转换,可检查操作结果,假设为NULL则转换失败。所以採用动态类型转换,一定要进行指针的推断。这样的在执行阶段识别对象类型的机制称为执行阶段类型识别(RTTI。runtime type identification)

reinterpret_cast:

属于强制类型转换。与C风格类型转换最接近。不进行相关性推断,强制编译器接收static_cast通常不同意的类型转换。一般用于低级的驱动程序。一般不使用这样的方式。

const_cast:

让程序猿可以关闭对象的訪问修饰符const。通常改动因为使用const引用来调用non-const成员函数编译导致的错误,利用const_cast把const引用转变为non-const引用,然后就行顺利的编译和运行。

C++ 类型转换运算符存在的问题

在现代C++中,除了dynamic_cast之外的类型转换都是能够避免的。仅当须要满足遗留应用程序需求时。才须要使用其它类型转换运算符。

重要的是,一旦使用类型转换。务必要知道幕后发生的情况。

在使用中应牢记:将派生类转换为基类类型叫做向上转换。是安全的;将基类类型转换为派生类类型叫做向下转换。除非使用dynamic_cast否者是不安全的。请牢记,创建继承层次结构时。应尽量将函数声明为虚函数,这样通过基类指针调用这些函数时,假设该指针指向的是派生类对象,将调用对应类的函数版本号;在使用dynamic_cast别忘了对指针进行检查。看其是否有效。

C++类型转换运算符 static_cast,dynamic_cast,reinterpret_cast,const_cast相关推荐

  1. c++ 数据类型转换: static_cast dynamic_cast reinterpret_cast const_cast

    c++ 数据类型转换: static_cast dynamic_cast reinterpret_cast const_cast [版权声明]转载请注明出处 http://www.cnblogs.co ...

  2. static_cast,dynamic_cast,reinterpret_cast,const_cast的使用

    关于强制类型转换的问题,很多书都讨论过,写的最详细的是C++ 之父的<C++ 的设计和演化>.最好的解决方法就是不要使用C风格的强制类型转换,而是使用标准C++的类型转换符:static_ ...

  3. static_cast, dynamic_cast, reinterpret_cast, const_cast区别比较

    转载于:http://www.cnblogs.com/jerry19880126/archive/2012/08/14/2638192.html 隐式转换(implicit conversion) s ...

  4. 类型转换操作符:static_cast, dynamic_cast, const_cast, reinterpret_cast.

    呵呵,今天来好好看看着几个转换操作符的用法.以前老是看着眼熟,但是用着手生.今天决定搞定这些个东西. 在C语言中类型转换有几种方式: 1.      (expression). 在表达式外边加括号,由 ...

  5. 【C++ 语言】类型转换 ( 转换操作符 | const_cast | static_cast | dynamic_cast | reinterpret_cast | 字符串转换 )

    文章目录 I . const_cast 转换操作符 II . static_cast 转换操作符 III . dynamic_cast 转换操作符 IV . reinterpret_cast 转换操作 ...

  6. C++ 11 深度学习(五)类型转换:static_cast dynamic_cast const_cast reinterpret_cast

    四种cast 通用形式:强制类型转换名<type>(express) @强制类型转换名,以上四种  :@type:想要转成成的目标类型 : @express,需要转换的目标 static_ ...

  7. C++类型转换运算符(dynamic_cast, const_cast, static_cast)

    C++类型转换运算符 1. dynamic_cast 2. const_cast 3. static_cast 4. reinterpret_cast 摘自以下图书: <C++ Primer P ...

  8. C++中四种类型转换方式(ynamic_cast,const_cast,static_cast,reinterpret_cast)

    Q:什么是C风格转换?什么是static_cast, dynamic_cast 以及 reinterpret_cast?区别是什么?为什么要注意? A:转换的含义是通过改变一个变量的类型为别的类型从而 ...

  9. C++中static_cast, dynamic_cast, const_cast用法/使用情况及区别解析

    目录 第1部分. 隐式类型转换 第2部分. 显式类型转换 static_cast dynamic_cast reinpreter_cast const_cast 首先回顾一下C++类型转换: C++类 ...

最新文章

  1. waf可以查看post请求吗_WAF是如何被绕过的?
  2. maven与spring_与Spring和Maven签约首个SOAP服务
  3. leetcode 179 python
  4. Android7.0 发生的android.os.FileUriExposedException错误
  5. Windows下动态库的制作与使用
  6. Unity 检测物体是否在相机视野范围内
  7. 散粉在哪个步骤用_新手化妆步骤+50个美妆小技巧+化妆知识扫盲
  8. JavaScript数字精度丢失问题总结
  9. 《HTML5游戏编程核心技术与实战》——2.3 图像API
  10. in front of 与in the front of区别
  11. 写给小白的网站优化初步全过程
  12. winform高仿腾讯QQ2013,几十个界面哦!!
  13. 【stm32单片机基础】按键状态机实现长按和短按
  14. POI 设置Excel单元格背景色(参考颜色代码)
  15. python中code函数是干嘛的_[Code] Python简单小知识
  16. 基于G6-Editor的流程图编辑器
  17. 剑指offe 面试题5, 从尾到头打印链表
  18. 经常用电脑,要注意脸部保养
  19. lammps学习(一)单晶硅纳米磨削
  20. 攻防红队日记:利用路由器创建PPTP搭建隧道进内网

热门文章

  1. 深入理解JVM(第二版读书笔记)
  2. 毕业5年跳槽24次,为什么这届95后换工作越来越勤?
  3. 零基础 | 入行软件测试,你想知道的都在这里了
  4. 基于jmeter测试web接口,看完都说学会了
  5. 一个figure存在多个legend:多行多列图例
  6. php 多层 对象,php多层数组和对象的转换
  7. c语言基本数据类型1,1、C语言基本数据类型
  8. python字符串函数split_Python常见字符串操作函数小结【split()、join()、strip()】
  9. AntTweakBar with OpenGL
  10. BN处理较深的神经网络