命名的强制类型转换

具体格式如下:

cast-name<type>(expression)
  • type是转换的目标类型
  • expression是要转换的对象
  • cast-name包括static_cast、dynamic_cast、const_cast和reinterpret_cast

static_cast

只要不包含底层const都可以使用static_cast。例如下面转换:

double slope = static_cast<double>(j)/i;
  • 当需要把一个较大的算术类型赋值给较小的类型时,强制类型转换告诉程序的读者和编译器:我们知道并且不在乎潜在的精度损失。

  • 用于父类和子类之间的指针转换

    • 进行上行转换(子转父)安全
    • 进行下行转换(父转子)不安全,由于没有动态类型检查,所以是不安全的
  • 用于父和之间的指针转换

    • 进行上行转换(子转父)安全
    • 进行下行转换(父转子)不安全,由于没有动态类型检查,所以是不安全的
  • 用于基本数据类型转换

  • 泛型指针转回基本指针类型

  • 空指针转换为目标类型空指针

dynamic_cast

具体格式如下:

type类型一定有虚函数

dynamic_cast< type* >(e); //type必须是一个类类型且必须是一个有效的指针
dynamic_cast< type& >(e); //type必须是一个类类型且必须是一个左值
dynamic_cast< type&& >(e); //type必须是一个类类型且必须是一个右值

e的类型必须符合以下三个条件中的任何一个:

  1. e的类型是目标类型type的公有派生类
  2. e的类型是目标type的共有基类
  3. e的类型就是目标type的类型。

各种失败情况

  1. 如果一条dynamic_cast语句的转换目标是指针类型并且失败了,则结果为0。
  2. 如果转换目标是引用类型并且失败了,则dynamic_cast运算符将抛出一个std::bad_cast异常(该异常定义在typeinfo标准库头文件中)

用途

  • 空指针,结果是所需类型的空指针。

  • dynamic_cast主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换

    • 在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的;在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全
  • 用于下行转换时,一般成功的是指针或引用的类型虽然是基类指针或引用,但其指向的内存块的真实类型是其要转换的子类类型dynamic_cast彻底明白了

const_cast

只能用于改变运算对象的底层const,去掉const性质

  1. 常量指针 被强转为 非常量指针,且仍然指向原来的对象;
  2. 常量引用 被强转为 非常量引用,且仍然指向原来的对象;
  3. 常量对象 被强转为 非常量对象。

不能用于其他命名强制类型转换

reinterpret_cast

一般用于指针类型的转换,但要时刻牢记其真实类型,否则容易异常

C++显示转换、dynamic_cast重点相关推荐

  1. ahjesus自定义隐式转换和显示转换

    implicit    关键字用于声明隐式的用户定义类型转换运算符. 如果可以确保转换过程不会造成数据丢失,则可使用该关键字在用户定义类型和其他类型之间进行隐式转换. 参考戳此 explicit    ...

  2. C#学习记录——使用Convert命令进行显示转换

    使用Convert命令进行显示转换 今天阅读<C#入门经典>第5版,边学习边记录. Convert命令可进行显示转换汇总 命令 结果 Convert.ToBoolean(val) val转 ...

  3. 腾讯视频格式转换(重点是CMD的命令)

    家头的姐姐喊我帮我把一段腾讯的QLV格式视频转成MP4. 我说,你可以百度呀... 然后给她看了百度经验.她说,看了,但是还是不会--_-! 不过我觉得能想出这个办法的人,还是好专业,好机智啊! 腾讯 ...

  4. js:金额显示转换 分转元 去除尾部的0

    目录 需求 思路 方法实现 2023-06-06补充 总结整理 需求 数据库里边存储的金额采用精确到分 的整数存储,原因是浮点数精度会丢失 用户界面需要转换为以元 为单位的数值显示 需要做分到元的转换 ...

  5. input框输入中文内容,另一个input框中时时显示转换后的拼音首字母缩写

    最近项目中需要完成在input标签内输入中文字符,动态的在另一个input中时时显示中文字符的首字母缩写(首字母都是大写).直接上代码: value属性可以写成value="",图 ...

  6. 马哥python课堂笔记_马哥-python-课堂笔记12-python核心数据类型及类型显示转换

    标签: python的核心数据类型(内置) 数字:int,long,float,complex(复数),bool(布尔型) 字符:str,unicode 列表:list 字典:dict 元组:tupl ...

  7. 整数类型及整数类型的显示转换

    整数类型:byte short int 和 long byte:变量表示范围为-128~127 在内存中占据1个字节(8位) short:变量表示范围为-32 768~32 767 在内存中占据2个字 ...

  8. 使用Convert命令进行显示转换

    如表,转换的名称略不同于C#类型名称,如:要转化为 int,应使用Convert.ToInt32(val),这是因为这些命令来自于 .NET Framework的Sytem的命称空间.而不是C#本身. ...

  9. Exaple2_1(显示转换)

    public class Example2_1{  public static void main(String arg[]){   char c='a';   System.out.println( ...

最新文章

  1. Android入门——电话拨号器和4种点击事件
  2. IO口多路查理复用:三个单片机IO口控制六个LED
  3. ElementUI中的el-form怎样格式化显示1和0为是和否
  4. 03-29复利计算单元测试
  5. mycat1.5~1.6的一个bug
  6. java design pattern
  7. 【6.0】组合主键映射
  8. 梅州市2021普通高考成绩查询,梅州高考成绩查询入口
  9. 与其纠结,不如放弃!
  10. Shell子程序结构,函数
  11. 微信公众号无法长按发送图片,长安反应慢
  12. ASP.NET Core免费(视频)教程汇总
  13. visio画图复制粘贴到word_VISO复制到WORD中全是空白框
  14. AI 智能写情诗、藏头诗
  15. 分享一下自己的手机从ios14降级回ios13.5.1,可以保存资料哦
  16. 看《流金岁月》杨珂带领销售团队成功之处
  17. Oracle dual表详解(zzl)
  18. JavaWeb学习总结——JavaWEB_Servlet(尚硅谷_佟刚老师)
  19. 软件测试工程师这个岗位职责是什么?具体都需要干什么?
  20. IPFS WebUI

热门文章

  1. 钱海丰:农药污染下的土壤微生态响应与风险预测​(今晚7点半)
  2. 推荐!150篇土壤微生态+60篇根际微生物近两年高影响因子文献合集
  3. JCP:曝气生物滤池处理焦化废水过程中N2O和NO的产生机理与群落功能研究
  4. Science: 多因子在驱动土壤功能及真菌群落变化中的作用
  5. 本年扩增子、宏基因组课程报名已满,想要学最早等明年
  6. Nature综述:多年冻土的微生物组
  7. 判断三角形java代码_小猿圈Java循环嵌套语法的使用介绍
  8. R语言嵌套的ifelse语距:将一条If语句放在另一条If语句中,该语句作为嵌套的If else调用。If else语句允许我们根据表达式结果(TRUE或FALSE)打印不同的语句,执行不同的语句块
  9. pandas遍历dataframe的行:迭代遍历dataframe的数据行、iterrows函数、itertuple函数
  10. Python使用pandas读取两个或者多个excel文件(xlsx)并进行数据连接(join)合并两个或者多个excel的信息