在写代码中经常会有很多的隐式类型转换或显式类型转换。

对于隐式的类型转换主要是放生在赋值的时候,讲变量赋值给不同类型的变量的时候就会发生类型转换,如果是宽化转换(即从占字节少的类型向占字节多的类型转换),这个时候是不会出现丢失数据的。如果是窄化转换(从占字节多的类型向占字节少的类型转换),这个时候就很有可能会出现丢失数据,或者数据错误(如从有符号向无符号转换,就可能会出现各种无法想象的问题)。。。所以这种情况应该尽量避免。

对于C风格显式转换,就是强制转换,可能会造成数据解释错误,也是很不安全的。

在C++中有四种类型转换:

static_cast <new_type> (expression) 静态转换

静态转换类似于C风格显式转换,但是会判断转换类型之间的关系,如果转换类型之间没有任何关系,则不可转换,编译器会报错。(不相关类型之间不可以发生转换).

dynamic_cast <new_type> (expression) 动态转换

动态转换有两个约束条件:其一是要求new_type为指针或引用,其二是下行转换时要求基类是多态的(基类中包含至少一个虚函数)。

动态转换支持上行转换和下行转换,但是对于不安全的下行转换,会返回NULL,提高安全性(上行转换:子类转化为父类,下行转换:父类转化为子类)。

reinterpret_cast <new_type> (expression) 重解释转换

重解释转换则是任何两个类型之间都可以转换,是最不安全的一种类型转换,尽量不要用。

const_cast <new_type> (expression) 常量向非常量转换

将常量转换为非常量,这个转换并不转换原常量本身,只是它返回的结果为非常量了

读:http://www.cnblogs.com/jerry19880126/archive/2012/08/14/2638192.html总结,仅个人笔记。

转载于:https://www.cnblogs.com/hyd5648/p/3921501.html

C++ 四种类型转换相关推荐

  1. 【C++】类型转换简述:四种类型转换方式的说明及应用

    本文主要简述在C++中四种类型转换的方式:static_cast.reniterpret_cast.const_cast和dynamic_cast. 在介绍C++类型转换方式之前,我们先来看看C语言的 ...

  2. C++/面试 - 四种类型转换(cast)的关键字 详解 及 代码

    四种类型转换(cast)的关键字 详解 及 代码 本文原创, 禁止转载, 如有需要, 请站内联系. 本文地址: http://blog.csdn.net/caroline_wendy/article/ ...

  3. C++四种类型转换总结

    来源:微信公众号「编程学习基地」 文章目录 类型转换 C语言类型转换 C++类型转换 const_cast 去常属性 寄存器骚操作 关键字volatile reinterpret_cast重解释 st ...

  4. C++ 四种类型转换操作符

    在c++中进行类型转换只需要在变量前加上变量类型,并且转换是双向的. 例如: int i = 0: double d = 1.9:int i1 = (int) d: double d1 = (doub ...

  5. c++ 四种类型转换机制

    类型转换机制可以分为:隐式类型转换 和 显示类型转换(强制类型转换) C中的类型转换: 事情要从头说起,这个头就是C语言.我们已经习惯了使用C-like类型转换,因为它强大而且简单. 主要有一下两种形 ...

  6. C++中四种类型转换方式

    C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是:TYPE b = (TYPE)a,但是c 风格的类型转换有不少的缺点,有的时候用c风格的转换是不合适的,因为它可以在任意类型 ...

  7. C++中四种类型转换运算符的使用方法

    C++的四个类型转换运算符已经有很久了,但一直没有弄清楚它们的用法,今天看到一本书上的解释,才大致地的了解了其具体的用法. 具体归纳如下: reinterpret_cast 该函数将一个类型的指针转换 ...

  8. C++ 四种类型转换运算符

    隐式类型转换是安全的,显式类型转换是有风险的,C语言之所以增加强制类型转换的语法,就是为了强调风险,让程序员意识到自己在做什么. 但是,这种强调风险的方式还是比较粗放,粒度比较大,它并没有表明存在什么 ...

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

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

最新文章

  1. 细水长flow之f-VAEs:Glow与VAEs的联姻
  2. Android第三十三天
  3. shiro框架的学习
  4. 【技巧】Chrome应用技巧
  5. OpenResty(nginx)操作redis的初步应用
  6. 刷题笔记(1) 一个序列是否为二叉搜索树的遍历结果
  7. 气势汹涌,天津设立千亿级AI基金;刘强东否认会因AI开除一半员工
  8. Google Bigtable文章终于出炉
  9. 小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_39、SpringBoot2.x整合redis实战讲解...
  10. MOSS User Profile(三):查看用户配置文件修改历史
  11. 阿里云产品介绍(一):云服务器ECS
  12. 投射式触摸屏自电容与互电容工作原理基础(未完待续)
  13. oracle基础|什么是数据字典|数据字典的作用
  14. IT项目管理之第5章 项目时间管理习题之选择题汇总
  15. Python2与Python3的区别(二):raw_input与input
  16. android 图片轮播组件,Android客户端实现图片轮播控件
  17. iOS ”打仙人掌“游戏一---游戏玩法实现
  18. 国内最好的五大广告聚合平台
  19. scrapy中集成selenium+浏览器池实现selenium的并发爬取LCSC网站中非结构化表格数据+异步存储进mysql+完整代码
  20. 跟着团子学SAP PS:企业如何依托信息化工具构建成熟的项目成本管理体系

热门文章

  1. 循环序列模型 —— 1.7 对新序列采样
  2. 设置固定高度_防排烟系统的设置,前室、楼梯间、避难层!设置要求全记住!...
  3. python给动态变量赋值_python 动态的定义变量名,并给其赋值
  4. java mysql 配置_Java连接MySQL数据库详细分析
  5. wps vba模块压缩包_01_创建第一个VBA小程序:你好,世界
  6. java arraylist 初始化_一不小心就让Java开发踩坑的fail-fast是个什么鬼?
  7. 服务器显示配置命令,linux查看服务器配置命令
  8. 黑苹果睡眠唤醒usb失灵_20191121关于睡眠唤醒,仍然黑屏,显示器无信号的问题...
  9. 两用物项许可证办理流程_办理医疗器械经营许可证流程
  10. 介绍一下mysql的存储过程和搜索引擎_MySQL基础(四)—存储过程和存储引擎