博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++中的类型转换
阅读量:7106 次
发布时间:2019-06-28

本文共 904 字,大约阅读时间需要 3 分钟。

hot3.png

1.const_cast

   看见const,大家第一反映就是关键字,对这个类型装换和const关键字相关。这个类型转换用来舍弃变量的不可变特性。实际在过程中,其实我们不许要使用这个类型转换。但是可能在使用第三方库的时候不如你所愿,库对你是不可见的,所以你需要这个转换。

2.static_cast

  static_cast是我们使用的最多的类型转换。它显示地执行C++语言直接支持的转换,比如int转换为double。对于自定义的类类型,只要提供了关键的构造函数或者转换例程也可以进行显示的转换。

   static_cast可以用于指针和引用,但是不能用与对象本身。很遗憾,它不进行类型检测,第四中介绍的类型转换会进行类型检测。

3.reinterpret_cast

  reinterpret的中文释义为重新解释,你可想而知,这个转换是多么的强大,你可以重新解释一个东西。两个指针指向的对象可以没有继承层次,你可以装换,当然应用也会可以的,即使他们之间什么关系也没。这个关键字经常被用来将指针转换为void*其实这个过程static_cast也可以)以及逆过程。

   你使用它将指针转换成int和int装换指针。虽然在某些情况下可以,但是移植行很差,比如在64位平台,指针是64位,而int可能是32位。

4.dynamic_cast

   dynamic释义动态的。它为继承层次结构内的类型提供运行时检测,需要RTTI(real time type infomation)支持。它可以装换指针和引用,在运行时检测对象类型,如果转换没有意义,对于指针返回一个空指针,对于引用抛出一个

bad_cast异常。

    由于对象运行时类型信息存储在对象的虚表中,为了可以使用dynamic_cast,需要类拥有一个虚函数。没有虚表的话,尝试使用它,对得到一个编译错误。

      使用static_cast和reinterpret_cast都可以沿着继承层次向下转型。不过dynamic_cast进行运行时检测,可能性能有那么一丁点影响,不过很安全

转载于:https://my.oschina.net/u/854744/blog/418439

你可能感兴趣的文章
KVM虚拟机管理程序(转)
查看>>
android中用Spannable在TextView中设置超链接、颜色、字体
查看>>
自定义BeanUtils的populate方法实现
查看>>
部署Nginx+Tomcat负载均衡集群
查看>>
Unable to instantiate default tuplizer [org.hib...
查看>>
Django模板--反向解析
查看>>
linux搭建grafana
查看>>
tomcat环境变量
查看>>
linux服务器搭建 NAT和DHCP超详细
查看>>
Java并发编程40道面试题及答案——面试稳了
查看>>
“大数据”领域里的“不明觉厉”
查看>>
调试Python程序代码的几种方法总结
查看>>
我的友情链接
查看>>
大数据处理相关的好博文
查看>>
Java IO:BIO和NIO区别及各自应用场景
查看>>
Google 宣布将会关闭消费者版本 Google+
查看>>
Linux 平台下的漏洞扫描器 Vuls
查看>>
Mysql常用命令
查看>>
maven servlet上传文件
查看>>
Query对象和DOM对象使用说明
查看>>