当前位置: 首页 > news >正文

C++11的四种强制类型转换

目录

语法格式

static_cast(静态转换)

dynamic_cast(动态转换)

const_cast(常量转换)

 reinterpret_cast(重解释)


语法格式

cast-name <typename> (expression)

其中cast-namestatic_castdynamic_castconst_cast 和 reinterpret_cast之一,typename为需要转换的目标类型,而expression是被强制转换的值。

static_cast(静态转换)

1、父类到子类的转换,( 进行下行转换,把基类的指针或引用转换为派生类表示)不保证安全。

2、子类到父类的转换,(进行上行转换,把派生类的指针或引用转换成基类表示)保证安全。

3、基本数据类型之间的转换,是否正确需要开发人员来保证。

4、void 类型的空指针,转换成其他类型空指针。

5、可以把任何类型的表达式 转换为 void类型。

static_cast不能转换掉表达式的const、volitale属性。

ps:C++11的移动语义就是的底层实现就是这个

dynamic_cast(动态转换)

dynamic 支持运行指针时,识别指针类型或所引用的对象。

换句话说,它可以在执行期决定真正的类型,如果基类指针真的指向了子类对象,它便返回指子类对象的指针值,否则,则返回空指针。(所以说到底,他就是比static_cast多了个类型检查

1、其他三种都是编译时完成的,dynamic_cast是运行时处理的。

2、不能用于基本数据类型的转换。

3、dynamic_cast转换如果成功的话返回的是指向类的指针或引用,转换失败的话则会返回NULL。

4、使用dynamic_cast进行转换的,基类中一定要有虚函数,否则编译不通过,类中存在虚函数,就说明它有想要让基类指针或引用指向派生类对象的情况,此时转换才有意义。

5、在类的转换时,在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的。在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。

const_cast(常量转换)

const_cast用于强制去掉const 特性,但需要特别注意的是const_cast不是用于去除变量的常量性,而是去除指向常数对象的指针或引用的常量性,其去除常量性的对象必须为指针或引用

1、该运算符用来修改类型的const或volatile属性。除了const 或volatile修饰之外, type_id和expression的类型是一样的。

2、常量指针被转化成非常量指针,并且仍然指向原来的对象;

3、常量引用被转换成非常量引用,并且仍然指向原来的对象;

4、常量对象被转换成非常量对象。

 reinterpret_cast(重解释)

它可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针(先把一个指针转换成一个整数,再把该整数转换成原类型的指针,还可以得到原先的指针值)。
在使用reinterpret_cast强制转换过程仅仅只是比特位的拷贝,因此在使用过程中需要特别谨慎!

1、改变指针或引用的类型

2、将指针或引用转换为一个足够长度的整型

3、将整型转换为指针或引用类型

http://www.lryc.cn/news/137054.html

相关文章:

  • 分布式事务(4):两阶段提交协议与三阶段提交区别
  • React源码解析18(9)------ 实现多节点渲染【修改beginWork和completeWork】
  • 【GUI】基于开关李雅普诺夫函数的非线性系统稳定(Matlab代码实现)
  • Redis 缓存满了怎么办?
  • Grafana 安装配置教程
  • 【Linux】临界资源和临界区
  • 拓扑排序Topological sorting/DFS C++应用例题P1113 杂务
  • 基于jenkins构建生成CICD环境
  • 在线图片怎么转换成PDF?在线图片转换成PDF步骤介绍
  • Linux共享库基础及实例
  • java八股文面试[java基础]——final 关键字作用
  • Redis 分布式锁存在什么问题 ?如何解决 ?
  • n5173b是德科技keysight N5173B信号发生器
  • React源码解析18(10)------ 实现多节点的Diff算法
  • Linux指令篇!
  • Vue2学习笔记のVue组件化编程
  • 跨境电商儿童沙画办理EN71测试标准
  • chrome浏览器账号密码输入框自动填充时背景色不变
  • 【ARM】Day9 cortex-A7核I2C实验(采集温湿度)
  • 【Leetcode】移动零
  • 数据结构入门 — 顺序表详解
  • SimpleCG绘图函数(9)--绘制各种线条
  • RISCV 6 RISC-V加载存储指令
  • 木叶飞舞之【机器人ROS2】篇章_第二节、turtlebot3安装
  • 【论文阅读】自动驾驶安全的研究现状与挑战
  • 标签打印小工具 选择图片打印,按实际尺寸打印。可旋转图片
  • 什么是深拷贝和浅拷贝?
  • 安装docker服务及docker基本操作
  • 【项目经验】:项目中下拉框数据太多造成页面卡顿(二)
  • Prompt本质解密及Evaluation实战(一)