学习笔记 | c++中四种类型cast(强制)转换
c++中四种cast转换
C++四种强制转换方式,应用场景,细节
1、const_cast
- 用于将
const变量
转为非const
。 - 用来修饰类型的
const
或volatile
属性。除了去掉const
或者volatile
修饰之外,type_id
和expression
得到的类型是一样的。 - 但需要特别注意的是
const_cast
不是用于去除变量的常量性,而是去除指向常数对象的指针或引用的常量性,其去除常量性的对象必须为指针或引用。
2、static_cast
- 用于各种隐式转换,比如
非const转const
,void * 转指针
等,static_cast
能用于多态向上转化,如果向下转能成功但是不安全,结果未知; - 用于基本数据类型之类的转换,如把int转换为char,把int转换成enum。这种转换的安全性也要开发人员来保证。
3、dynamic_cast
用于动态类型转换。只能用于含有虚函数的类,用于类层次间的向上和向下转化。只能转指针或引用。向下转化时,如果是非法的对于指针返回NULL,对于引用抛异常。 要深入了解内部转换的原理。
- 向上转换:指的是子类向基类的转换。
- 向下转换:指的是基类向子类的转换。
它通过判断在执行到该语句的时候变量的运行时类型和要转换的类型是否相同来判断是否能够进行向下转换。
dynamic_cast
会动用运行时信息RTTI
来进行类型安全检查,因此dynamic_cast
存在一定的效率损失。当使用dynamic_cast
时,该类型必须含有虚函数,这是因为dynamic_cast
使用了存储在vtable
中的信息来判断实际的类型,RTTI
运行时类型识别用于判断类型。typeid
表达式的形式时typeid(e)
,typeid
操作的结果是一个常量对象的引用,该对象的类型是type_info
或type_info
的派生。
4、reinterpret_cast
- 几乎什么都可以转,比如将
int
转指针 ,可能会出问题,尽量少用; - 可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针(先把一个指针转换成一个整数,在把该整数转换成原类型的指针,还可以得到原先的指针值)。
为什么不使用C的强制转换?
- C的强制转换表面上看起来功能强大什么都能转,但是转化不够明确,不能进行错误检查,容易出错。
学习笔记 | c++中四种类型cast(强制)转换相关推荐
- AI学习笔记--人机对话的四种形态
AI学习笔记--人机对话的四种形态 ><div class="show-content-free"><p>最近在筹备转行 AI PM 由于之前的产品线 ...
- LayoutInflater中四种类型inflate方法的介绍
第一种: public View inflate (int resource, ViewGroup root) resource : View 的 layout 的 ID root :如果返回 nul ...
- C++中四种类型装换
1.类型转换 static_cast<>():静态类型转换,编译时C++编译器会做类型检查,在C语言中,隐式类型转换的地方,均可以使用static_cast<>()进行类型 ...
- [C#学习笔记]C#中的decimal类型——《CLR via C#》
System.Decimal是非常特殊的类型.在CLR中,Decimal类型不是基元类型.这就意味着CLR没有知道如何处理Decimal的IL指令. 在文档中查看Decimal类型,可以看到它提供了一 ...
- SpringCloud学习笔记026---SpringBoot中使用不同类型的数据库_MySql_PostGreSql_使用template
JAVA技术交流QQ群:170933152 开发企业应用时我们常常遇到要同时访问多种不同数据库的问题,有时是必须把数据归档到某种数据仓库中,有时是要把数据变更推送到第三方数据库中.使用Spring框架 ...
- SAP MM学习笔记5-SAP中的移动类型实例,对应收货入库以及退货之后的各种情况
对应现实的情况,SAP中有各种各样的收货模式.在SAP中使用移动Type来对应这些情况. 最常用的就是 移动Type 101 收货.没有意外情况,就是正常的收货. 以下是我调查及验证的结果,如果有错误 ...
- long(Long)与int(Integer)四种类型之间互相转换的方法分享
最近开发的项目,里面的金额比较大,经常有long型 ,int型,那么他们之间怎么转换呢? 下文笔者将一一道来,如下所示: 一.将long型转化为int型,此处的long型是基础类型: long a = ...
- SpringMVC中四种日期格式的转换
首先写一个表单: <form action="zy/add" method="post">添加用户姓名:<input name="n ...
- C++中的四种类型转化
Q:什么是C风格转换?什么是static_cast, dynamic_cast 以及 reinterpret_cast?区别是什么?为什么要注意? A:转换的含义是通过改变一个变量的类型为别的类型从而 ...
最新文章
- CentOS 7.x自定义开机启动设置
- 3dmax全局材质灯光细分插件_3Dmax渲染Vray渲染提速优化技巧
- python第三方库排行-140种Python标准库、第三方库和外部工具
- python创建txt文件-python创建txt文件
- MySQL删库数据延迟恢复策略
- RC隔离级别下的GAP间隙锁
- java设计汽车为父类_JAVA设计一个汽车类作为父类,包含汽车的相关属性和方法。电动汽车,普通汽车,混合汽车,...
- 【学习OpenCV4】如何操作图像中的像素?
- java异步处理rest服务_异步处理rest服务
- oracle高性能分页,Oracle中高性能分页包
- 决策控制方法:sequential 规划、behavior-aware规划、端到端规划
- CoolHC Volume 2 By CoolFire
- 医学图像预处理之CT成像原理
- 黑程序员黑的最好的段子是什么?
- 人民的名义关系可视化展示
- 三方协议的服务器,电子口岸电子支付签定三方协议是怎么操作的
- PDF转成Word或PPT后不能修改的原因和解决方法
- 开酒馆前的注意事项 (上)
- docker删除镜像及容器
- 幻塔服务器已关闭怎么办
热门文章
- 【消息队列】五个问题详解消息中间件
- RK3128-Android7.1-IR-深度剖析
- 94、DehazNeRF: Multiple Image Haze Removal and 3D Shape Reconstruction using Neural Radiance Fields
- The run destination iPhone is not valid for running the scheme “xx”
- Web学习(二)CSS
- 【blender建模功能】03 倒角工具
- 用c语言编写的打字母游戏,用C语言编写小游戏——“井字棋”
- 387. 字符串中的第一个唯一字符(javascript)387. First Unique Character in a String
- idea下载插件方法
- 学习FileReader和FileWriter类