C++为什么要引入这几种强制类型转换?
我们都知道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++为什么要引入这几种强制类型转换?相关推荐
- C++中的向上类型转换和向下类型转换+四种强制类型转换
转自博客:http://blog.csdn.net/wangweitingaabbcc/article/details/7720979# 在c++的世界中有这样两个概念,向上类型转换,向下类型转换,分 ...
- C++中4种强制类型转换 ?
C++中4种强制类型转换 前言 C风格的转换格式很简单,但是有不少缺点 C++中的类型转换: 一.static_cast转换 二.dynamic_cast转换 三.const_cast转换 四.rei ...
- C++的四种强制类型转换
C++的四种强制类型转换,所以C++不是类型安全的.分别为:static_cast , dynamic_cast , const_cast , reinterpret_cast 为什么使用C风格的强制 ...
- C++四种强制类型转换
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 C++四种强制类型转换 一.static_cast 二.dynamic_cast 三.const_cast 四.reinterpret ...
- C++四种强制类型转换解析
C++的四种强制类型转换主要是static_cast<>,const_cast<>,reinterpret_cast,dynamic_cast<> 接下来依次介绍一 ...
- 逐梦C++之四:四种强制类型转换
1.总括四种强制类型转换 static_cast const_cast dynamic_cast reinterpret_cast 2.static_cast static_cast是最常用的强制类型 ...
- C++ :四种强制类型转换
文章目录 一.四种类型转换 1. static_cast<>() 2. const_cast<>() 3. reinterpret_cast<>() 4. dyna ...
- C语言中的4种强制类型转换!
前言 在C语言中,我们需要做类型转换时,常常就是简单粗暴,在C++中也可以用C式强制类型转换,但是C++有它自己的一套类型转换方式. C式的显示类型转换 先来说说C式的强制类型转换,它的用法非常简单, ...
- 深入理解C++中五种强制类型转换的使用场景
深入理解C++中五种强制类型转换的使用场景 1.C风格的强制类型转换 2.C++风格的强制类型转换 2.1.static_cast 2.1.1.用于基本内置数据类型之间的转换 2.1.2.用于指针之间 ...
最新文章
- docker 安装 solr搜索引擎
- Java序列化注意事项
- js文件中加载其他js文件
- H3C 基于IP的限速
- codeforces1151 E. Number of Components(计数)
- SmartGWT入门,提供出色的GWT界面
- 如何拿到阿里算法校招offer
- 本杰明 富兰克林 道德13准则
- java+fseek+函数_函数fseek() 用法(转)
- pfring(pf_ring)编译安装
- JSON-B和Yasson详解
- echarts饼图解析html标签,如图,用了echarts页面为什么不识别html标签?
- layui表单验证必填;下拉列表必填;xmselect必填;layui vue下拉列表必填
- 30 系列显卡是新一代架构,新驱动不支持 cuda 9 以及 cuda 10,所以必须安装 cuda 11
- AI语音机器人有哪些需要注意事项
- UniApp 获取屏幕分辨率
- 【iOS】Plist-XML-JSON数据解析
- 明明可以靠脸吃饭偏要靠才华_你身边有女神程序员吗?
- 利用SRS搭建直播服务器
- GOOGLE Weather API 一套google天气图标
热门文章
- [转载] lstm时间序列预测_pytorch入门使用PyTorch进行LSTM时间序列预测
- [转载] OpenCV-Python 图像处理(二):图像的读取、显示与保存
- [转载] python创建集合set()_Python 集合set()
- [转载] python中随机数生成函数_python中seed随机函数如何生成随机数?
- verilog之状态机的结构
- 添加多个button或其他的控件
- ruby nokogiri 数据抓取
- isnan 函数 -javascript1.1
- Win2003安装不了 Windows Media Player 11
- 访问被拒绝:“Interop.jmail”