C++与类型转换相关的四个关键字
为什么80%的码农都做不了架构师?>>>
C++与类型转换相关的四个关键字有:const_cast、static_cast、dynamic_cast、reinterpret_cast
C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是:
TYPE b = (TYPE)a。
C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用。
const_cast,字面上理解就是去const属性。
static_cast,命名上理解是静态类型转换。如int转换成char。
dynamic_cast,命名上理解是动态类型转换。如子类和父类之间的多态类型转换。
reinterpret_cast,仅仅重新解释类型,但没有进行二进制的转换。
4种类型转换的格式,如:TYPE B = static_cast(TYPE)(a)。
const_cast
去掉类型的const或volatile属性。
static_cast
类似于C风格的强制转换。无条件转换,静态类型转换。用于:
1. 基类和子类之间转换:其中子类指针转换成父类指针是安全的;但父类指针转换成子类指针是不安全的。(基类和子类之间的动态类型转换建议用dynamic_cast)
2. 基本数据类型转换。enum, struct, int, char, float等。static_cast不能进行无关类型(如非基类和子类)指针之间的转换。
3. 把空指针转换成目标类型的空指针。
4. 把任何类型的表达式转换成void类型。
5. static_cast不能去掉类型的const、volitale属性(用const_cast)。
dynamic_cast
有条件转换,动态类型转换,运行时类型安全检查(转换失败返回NULL):
1. 安全的基类和子类之间转换。
2. 必须要有虚函数。
3. 相同基类不同子类之间的交叉转换。但结果是NULL。
reinterpret_cast
仅仅重新解释类型,但没有进行二进制的转换:
1. 转换的类型必须是一个指针、引用、算术类型、函数指针或者成员指针。
2. 在比特位级别上进行转换。它可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针(先把一个指针转换成一个整数,在把该整数转换成原类型的指针,还可以得到原先的指针值)。但不能将非32bit的实例转成指针。
3. 最普通的用途就是在函数指针类型之间进行转换。
4. 很难保证移植性。
总结
去const属性用const_cast。
基本类型转换用static_cast。
多态类之间的类型转换用daynamic_cast。
不同类型的指针类型转换用reinterpret_cast。
转载于:https://my.oschina.net/134596/blog/1785972
C++与类型转换相关的四个关键字相关推荐
- c++有哪四个类型转换相关的关键字
[面试题]c++有哪四个类型转换相关的关键字? 在C/C++语言中用 (type) value(在C++还可以采用type(value))来进行显式类型转换(explicit type convers ...
- C++中,有哪4种与类型转换相关的关键字?各有什么特点?应该在什么场合下使用?
C++中,四个与类型转换相关的关键字:static_cast.const_cast.reinterpret_cast.dynamic_cast. 一.static_cast 特点:静态转换,在编译处理 ...
- c++中4个与类型转换相关的关键字总结
C++中,四个与类型转换相关的关键字:static_cast.const_cast.reinterpret_cast.dynamic_cast. 1.static_cast------运算符完成相关类 ...
- 高德地图四:关键字搜索
高德地图四:关键字搜索 关键字检索介绍 根据关键字检索适用于在某个城市搜索某个名称相关的POI,例如:查找北京市的"肯德基". 注意:关键字未设置城市信息(默认为全国搜索)时,如果 ...
- 与Java相关的四十个名字,
与Java相关的四十个名字--十大产品 Sun JDK :Java的基石 文/莫映 众所周知,流传于市的JDK不单Sun一家,比如IBM的JDK.BEA的JRocket.GNU的GCJ,以及如Kaff ...
- 十大事件与Java相关的四十个名字之浅谈篇
十大事件与Java相关的四十个名字 十大事件 1990-1994:Java缘起 文/孟岩 Larry Wall说,优秀程序员应有的三个特点:懒惰.急躁和傲慢.Java就是诞生在一群懒 惰.急躁而傲慢的 ...
- Android camera 相关术语(四) 之 变焦和对焦的区别VCM 闭环和开环在硬件上有什么区别
Android camera 相关术语(四) 之 变焦和对焦的区别VCM 闭环和开环在硬件上有什么区别 VCM 闭环马达(即close loop)与开环马达(即open loop)一般有两个硬件上的 ...
- Android音频相关(四)设置铃声流程总结
本文主要介绍的是设置铃声的流程,在流程梳理清楚后解决问题也有大致的方向了. 一.要点概述 补充知识点: frameworks/base/packages/SettingProvider/中的生成的数据 ...
- 与Java相关的四十个名字 (2005.08.18 来自:《程序员》杂志)
十大事件 1990-1994:Java缘起 文/孟岩 Larry Wall说,优秀程序员应有的三个特点:懒惰.急躁和傲慢.Java就是诞生在一群懒惰.急躁而傲慢的程序天才之中. 1990年12月,Su ...
最新文章
- typescript调用javascript URI.js
- 在 Linux 上给用户赋予指定目录的读写权限
- 吴恩达深度学习课程deeplearning.ai课程作业:Class 2 Week 2 Optimization methods
- 有了这篇网络排错思路大总结:我帮了不少同事~
- 远程java接口说明
- java 监听器实现原理
- flink-faker用法示例(还没弄完,到时候再说)
- ssh端口转发(之kettle ssh方式连接数据库)
- 23种设计模式之模板方法
- 用Arduino+OSC建立一个iPad铁路王国巡视机
- 微信公众号推送模板跳转小程序
- Dovecot 邮件假删除、回收站功能 (使用lazy-expunge插件)
- 在运维日常工作过程中遇到的一些问题,以及最终的解决方法!!(持续更新帖)
- cad断点快捷键_CAD打断命令怎么使用,快捷键是什么
- 界面设计中如何增强CTA按钮召唤力?
- CUDA编程实现求解单源Bellman-Ford最短 路径算法
- 2018 ISCC re\web\misc WP
- java发邮件要收费吗,2年以上经验必看
- FluentData
- SDNU 1221
热门文章
- 计算机视觉应用的简称,计算机视觉应用之图像检索任务简单介绍
- 多少分才能考上重庆计算机学校,重庆多少分能上985大学?重庆985院校分数线是多少?(2021年参考)...
- python只能对列表进行切片_Python3:类型错误:列表索引必须是整数或切片,而不是s...
- git怎么上传文件到别人的仓库_Git将本地代码上传至远程仓库
- 2个网页跳来跳去_怎么写最优化的网页标题标签(Title Tag)?
- Python的zip
- 笔记:Matrix completion by Truncated Nuclear Norm Regularization
- 【总结】循序渐进,有三AI不得不看的技术综述(超过100篇核心干货)
- 【每周CV论文推荐】 初学活体检测与伪造人脸检测必读的文章
- 中国智能控制器行业运营分析与竞争趋势展望报告2022-2027年版