C++类型转换

举报
Tracy 发表于 2019/10/15 21:37:15 2019/10/15
【摘要】 博客原文:https://blog.csdn.net/qq_39412582/article/details/82392147 原文更加详细哦强制类型转换我们先来看一看以前是怎么定义数据类型转换的:#include <iostream>using namespace std;void Test(){ //隐式的类型转换 int i = 10; double d = i; printf("%...

博客原文:https://blog.csdn.net/qq_39412582/article/details/82392147 原文更加详细哦

强制类型转换

我们先来看一看以前是怎么定义数据类型转换的:


image.png

7782dff0da03492daba5b782dd2ccc3e.png

这种转换有一个缺陷就是:强制转换可视效果差,所有的转换形式都是同一种形式书写,如果出现错误,不容易跟踪错误的转换。

C++类型转换

为了解决强制转换带来的可视化效果差的问题引入了四种命名的强制类型转换操作符:static_cast,reinterpret_cast,const_cast,dynamic_cast 四个操作符你见过几个?哈哈哈,没见过也没关系,我也没见过几个。下面我仔细地解释这四个操作符:

• static_cast static_cast用于非多态类型的转换(也叫静态转换),编译器隐式执行的任何类型转换都可以用static_cast,但它不能用于两个不相关的类型进行转换,干说条条没有用,我们看一看它是怎么使用的吧:


image.png

怎么理解不能用于两个不相关的类型进行交换呢?double和int都是同一类型,但是a是一个int类型的变量,而我们却把的强转成(int*)类型当然是不可以了,一个是整形,一个是指针类型,这就叫不相关类型

•reinterpret_cast reinterpret_cast操作符通常为操作数的位模式提供较低层次的重新解释,用于一种类型转换为另一种不同的类型


image.png

reinterpret_cast可以让编译器一FUNC的定义方式去看待DoSomething函数,但是C++不能保证所有的函数指针都被一样的使用,所以这使用有时会产生不确定的结果

•const_cast const_cast最常用的就是删除变量的const属性,方便赋值


image.png

为什么要用指针而不是其他类型呢? 我们看看不用指针会出现什么结果:

•dynamic_cast dynamic_cast用于将一个父类对象的指针转换为子类对象的指针或者引用(动态转换) 动态转换又分为: 向上转型:子类对象指针->父类对象指针/引用(不需要转换,遵循赋值兼容规则) 向下转型:父类对象指针->子类对象指针/引用(用dynamic_cast转型是安全的) 看看代码实现:

image.png

c50d8f7932374101a95021da512de49d.png


本文转载自异步社区。

文链接

https://www.epubit.com/articleDetails?id=N2c3b36b0-c4f9-4a80-8821-84bc123656d0

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。