IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++中的类型转换操作符 -> 正文阅读

[C++知识库]C++中的类型转换操作符

C++中有使用旧式转型的方式进行类型转换的方法,但能不用尽量不要用,它可能会破坏我们的整个项目,尽量使用以下四种类型转换操作符

const_cast

const_cast操作符允许添加或移除表达式中的const或volatile修饰符:

const Name *getMyName(){}//函数返回值为const Name *
Name *myname=const_cast<Name *>(getMyName());
//去掉了const修饰符

使用旧式转型的方法为

myname=(Name *)getMyName();//将const Name *返回值类型强制转换为Name *

还是那句话,不推荐这种写法,遇到这种情况,应优先使用const_cast,因为类型转换容易导致BUG的产生,而const_cast要比旧式转型的程度小,它只改变类型修饰符(在容易出错的地方改动越小越安全!),就好比以上例子,const_cast仅仅去掉了const,而旧式转型生硬的将const Name *类型转换为Name *

static_cast

static_cast操作符用于将一个继承层次结构中的基类的指针或引用,向下转型为一个派生类的指针或引用

class Shape{...};
class Circle:public Shape(...};
Shape *ptr=new Circle;//父类指针指向子类对象
Circle *ptr2=static_cast<Circle *>(ptr);//将父类指针向下转型为子类指针

指向Circle的Shape指针能成功的向下转化为指向Shape指针,指向其他子类的Shape指针不一定能成功转化

可以将两种转换合并为一个

const Shape *getNextShape(){...}
Circle *ptr3=static_cast<Circle *>(const_cast<Shape *>(getNextShape()));
//接连进行两次转换

reinterpret_cast

reinterpret_cast的转化能力更强大,它是C++与旧式转型最接近的类型转换运算符,他让程序员能够将一种对象类型转换为另一种,不管它们是否有关系,通常不优先使用它

char * ptr4=reinterpret_cast<char *>(0x00ff0000);//将int类型转化为char *
int *ptr5=reinterpret_cast<int *>(ptr4);//将char *转化为int *

dynamic_cast和运行阶段类型识别

dynamic_cast在运行阶段执行类型转换。可检查dynamic_cast操作的结果,以判断类型转换是否成功。

Sharp *ptr6=new Circle();
Circle *ptr7=dynamic_cast<Circle *>(ptr6);
if(ptr7)
	ptr7->callCircleClassFunction();

还可把转换直接写到if语句内,这样ptr7的作用于被限制在if语句之内,当我们不在使用它时,ptr7将会离开作用于(ptr7指向的对象将会被销毁)

Sharp *ptr6=new Circle();
if(Circle *ptr7=dynamic_cast<Circle *>(ptr6))
	ptr7->callCircleClassFunction();
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-04 11:00:48  更:2021-08-04 11:02:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/10 0:28:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码