我们都知道C++完全兼容C语言,C语言的转换方式很简单,可以在任意类型之间转换,但这也恰恰是缺点,因为极其不安全,可能不经意间将指向const对象的指针转换成非const对象的指针,可能将基类对象指针转成了派生类对象的指针,这种转换很容易出bug,需要严格审查代码才能消除这种隐患,但是C这种转换方式不利于我们审查代码,且程序运行时也可能会出bug。

C++为什么要引入这几种强制类型转换?

而C++引入的这几种类型转换可以完美的解决上述问题,不同场景下不同需求使用不同的类型转换方式,同时有利于代码审查。

下面详细介绍这四种类型转换的使用场景:

static_cast:基本数据类型之间的转换使用,例如float转int,int转char等,在有类型指针和void*之间转换使用,子类对象指针转换成父类对象指针也可以使用static_cast。非多态类型转换一般都使用static_cast,而且最好把所有的隐式类型转换都是用static_cast进行显示替换,不能使用static_cast在有类型指针之间进行类型转换。

C++为什么要引入这几种强制类型转换?

dynamic_cast:用于将父类的指针或引用转换为子类的指针或引用,此场景下父类必须要有虚函数,因为dynamic_cast是运行时检查,检查需要运行时信息RTTI,而RTTI存储在虚函数表中。

const_cast:用于常量指针或引用与非常量指针或引用之间的转换,只有const_cast才可以对常量进行操作,一般都是用它来去除常量性,去除常量性是危险操作,还是要谨慎操作。

reinterpret_cast:没啥场景,类似C语言中的强制类型转换,什么都可以转,万不得已不要使用,一般前三种转换方式不能解决问题了使用这种强制类型转换方式。

免费领取C++学习资料包

C++为什么要引入这几种强制类型转换?相关推荐

  1. C++中的向上类型转换和向下类型转换+四种强制类型转换

    转自博客:http://blog.csdn.net/wangweitingaabbcc/article/details/7720979# 在c++的世界中有这样两个概念,向上类型转换,向下类型转换,分 ...

  2. C++中4种强制类型转换 ?

    C++中4种强制类型转换 前言 C风格的转换格式很简单,但是有不少缺点 C++中的类型转换: 一.static_cast转换 二.dynamic_cast转换 三.const_cast转换 四.rei ...

  3. C++的四种强制类型转换

    C++的四种强制类型转换,所以C++不是类型安全的.分别为:static_cast , dynamic_cast , const_cast , reinterpret_cast 为什么使用C风格的强制 ...

  4. C++四种强制类型转换

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 C++四种强制类型转换 一.static_cast 二.dynamic_cast 三.const_cast 四.reinterpret ...

  5. C++四种强制类型转换解析

    C++的四种强制类型转换主要是static_cast<>,const_cast<>,reinterpret_cast,dynamic_cast<> 接下来依次介绍一 ...

  6. 逐梦C++之四:四种强制类型转换

    1.总括四种强制类型转换 static_cast const_cast dynamic_cast reinterpret_cast 2.static_cast static_cast是最常用的强制类型 ...

  7. C++ :四种强制类型转换

    文章目录 一.四种类型转换 1. static_cast<>() 2. const_cast<>() 3. reinterpret_cast<>() 4. dyna ...

  8. C语言中的4种强制类型转换!

    前言 在C语言中,我们需要做类型转换时,常常就是简单粗暴,在C++中也可以用C式强制类型转换,但是C++有它自己的一套类型转换方式. C式的显示类型转换 先来说说C式的强制类型转换,它的用法非常简单, ...

  9. 深入理解C++中五种强制类型转换的使用场景

    深入理解C++中五种强制类型转换的使用场景 1.C风格的强制类型转换 2.C++风格的强制类型转换 2.1.static_cast 2.1.1.用于基本内置数据类型之间的转换 2.1.2.用于指针之间 ...

最新文章

  1. docker 安装 solr搜索引擎
  2. Java序列化注意事项
  3. js文件中加载其他js文件
  4. H3C 基于IP的限速
  5. codeforces1151 E. Number of Components(计数)
  6. SmartGWT入门,提供出色的GWT界面
  7. 如何拿到阿里算法校招offer
  8. 本杰明 富兰克林 道德13准则
  9. java+fseek+函数_函数fseek() 用法(转)
  10. pfring(pf_ring)编译安装
  11. JSON-B和Yasson详解
  12. echarts饼图解析html标签,如图,用了echarts页面为什么不识别html标签?
  13. layui表单验证必填;下拉列表必填;xmselect必填;layui vue下拉列表必填
  14. 30 系列显卡是新一代架构,新驱动不支持 cuda 9 以及 cuda 10,所以必须安装 cuda 11
  15. AI语音机器人有哪些需要注意事项
  16. UniApp 获取屏幕分辨率
  17. 【iOS】Plist-XML-JSON数据解析
  18. 明明可以靠脸吃饭偏要靠才华_你身边有女神程序员吗?
  19. 利用SRS搭建直播服务器
  20. GOOGLE Weather API 一套google天气图标

热门文章

  1. [转载] lstm时间序列预测_pytorch入门使用PyTorch进行LSTM时间序列预测
  2. [转载] OpenCV-Python 图像处理(二):图像的读取、显示与保存
  3. [转载] python创建集合set()_Python 集合set()
  4. [转载] python中随机数生成函数_python中seed随机函数如何生成随机数?
  5. verilog之状态机的结构
  6. 添加多个button或其他的控件
  7. ruby nokogiri 数据抓取
  8. isnan 函数 -javascript1.1
  9. Win2003安装不了 Windows Media Player 11
  10. 访问被拒绝:“Interop.jmail”