最新要闻
- 当前观察:大获成功!《最后生还者》成史上收视率最高的游戏改编剧
- 爆款椰子鞋停售后:阿迪在中国凉凉了
- 1.3kg下颜值、性能、屏幕全给你!华硕灵耀14 2023评测:续航惊人
- 观热点:长城汽车发布Hi4全新新能源技术:4驱享受 2驱能耗
- 全球关注:杠上比亚迪秦PLUS DM-i 新款日产轩逸上市:9.98万起
- 8GB、16GB显存的性能差多少?实测多达172%!
- AMD最强核显跑分上来了!但是还打不过GTX 1650 Ti
- 全球最新:买丰田bZ4X电动车 送一辆威驰轿车?4S店回应:活动属实
- RTX 30公版显卡突然集体消失!刚刚降价40%
- 微头条丨公司规定不接董事长电话1次罚10000元 员工:试岗1天就走了
- 【全球快播报】校友承诺捐赠1100万元却不兑现被告 学校:他具备履约能力
- 紧跟微信步伐:支付宝掌纹支付设备外观专利获授权
- 【天天快播报】搅局中端市场!一加Ace2V评测:将16G满血内存进行到底
- 通讯!破壁机虚标功率后 疯狂小杨哥带货又翻车:面霜因虚假宣传被罚
- 《王者荣耀》出海“首战告捷”:登顶巴西免费游戏榜
- 3000块多品牌SSD质量大PK:整体比机械硬盘可靠
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
【全球独家】63.C++类型转换
类型转换(cast)是将一种数据类型转换成另一种数据类型。例如,如果将一个整型值赋给一个浮点类型的变量,编译器会暗地里将其转换成浮点类型。
转换是非常有用的,但是它也会带来一些问题,比如在转换指针时,我们很可能将其转换成一个比它更大的类型,但这可能会破坏其他的数据。
应该小心类型转换,因为转换也就相当于对编译器说:忘记类型检查,把它看做其他的类型。
(资料图)
一般情况下,尽量少的去使用类型转换,除非用来解决非常特殊的问题。
无论什么原因,任何一个程序如果使用很多类型转换都值得怀疑。
标准c++提供了一个显示的转换的语法,来替代旧的C风格的类型转换。
使用C风格的强制转换可以把想要的任何东西转换成我们需要的类型。那为什么还需要一个新的C++类型的强制转换呢?
新类型的强制转换可以提供更好的控制强制转换过程,允许控制各种不同种类的强制转换。C++风格的强制转换其他的好处是,它们能更清晰的表明它们要干什么。程序员只要扫一眼这样的代码,就能立即知道一个强制转换的目的。
//2023年3月10日19:52:46#pragma warning(disable:4996)#define _CRT_SECURE_NO_WARNINGS 1#include #include using namespace std;//静态转换//1.基础类型转换void test01(){ char a = "a"; //char->double; //static_cast<目标类型>(待转类型) double d = static_cast(a); //double d1 = (double)a;}//2.有层次关系的类的指针或引用转换class Father{};class Son :public Father{};class Other{};void test02(){ Father* f = NULL; Son* s = NULL; //向下转换,不安全 static_cast(f); //向上转换,安全 Father* f1 = static_cast(s); //没有继承关系的类之间的指针不能转换 //Other* o = static_cast(s);}//引用转换void test03(){ Father f; Son s; Father& ref_f = f; Son& ref_s = s; //向上转换,安全 static_cast(ref_s); //向下转换,不安全 static_cast(ref_f);}//动态转换void test04(){ //char a = "a"; //dynamic_cast(a);//基础数据类型不能使用动态转换 Father* f = NULL; Son* s = NULL; //向上,安全 Father* f1 = dynamic_cast(s); //向下,不安全,会检查 //Son* s1 = dynamic_cast(f);}class Father2{public: virtual void func() {};};class Son2 :public Father2{public: virtual void func() {};};//发生多态时,向下转换,动态转换就可以void test05(){ Father2* f = new Son2; dynamic_cast(f);}//常量转换void test06(){ const int* p = NULL; //const-->不带const int* newP = const_cast(p); int* pp = NULL; const int* newPP = const_cast(pp);}//重新解释转换void test07(){ int a = 10; int* p = reinterpret_cast(a); Father* f = NULL; Other* o = reinterpret_cast(f);}int main(){ test05(); system("pause"); return EXIT_SUCCESS;}
1.静态转换(static_cast)
●用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换。
▷进行上行转换(把派生类的指针或引用转换成基类表示)是安全的;
▷进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态类型检查,所以是不安全的。
●用于基本数据类型之间的转换,如把int转换成char,把char转换成int。这种转换的安全性也要开发人员来保证。
class Animal{};class Dog : public Animal{};class Other{};//基础数据类型转换void test01(){char a = "a";double b = static_cast(a);}//继承关系指针互相转换void test02(){//继承关系指针转换Animal* animal01 = NULL;Dog* dog01 = NULL;//子类指针转成父类指针,安全Animal* animal02 = static_cast(dog01);//父类指针转成子类指针,不安全Dog* dog02 = static_cast(animal01);}//继承关系引用相互转换void test03(){Animal ani_ref;Dog dog_ref;//继承关系指针转换Animal& animal01 = ani_ref;Dog& dog01 = dog_ref;//子类指针转成父类指针,安全Animal& animal02 = static_cast(dog01);//父类指针转成子类指针,不安全Dog& dog02 = static_cast(animal01);}//无继承关系指针转换void test04(){Animal* animal01 = NULL;Other* other01 = NULL;//转换失败//Animal* animal02 = static_cast(other01);}
2.动态转换(dynamic_cast)
●dynamic_cast主要用于类层次间的上行转换和下行转换;
●在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的;
●在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全;
class Animal {public:virtual void ShowName() = 0;};class Dog : public Animal{virtual void ShowName(){cout << "I am a dog!" << endl;}};class Other {public:void PrintSomething(){cout << "我是其他类!" << endl;}};//普通类型转换void test01(){//不支持基础数据类型int a = 10;//double a = dynamic_cast(a);}//继承关系指针void test02(){Animal* animal01 = NULL;Dog* dog01 = new Dog;//子类指针转换成父类指针 可以Animal* animal02 = dynamic_cast(dog01);animal02->ShowName();//父类指针转换成子类指针 不可以//Dog* dog02 = dynamic_cast(animal01);}//继承关系引用void test03(){Dog dog_ref;Dog& dog01 = dog_ref;//子类引用转换成父类引用 可以Animal& animal02 = dynamic_cast(dog01);animal02.ShowName();}//无继承关系指针转换void test04(){Animal* animal01 = NULL;Other* other = NULL;//不可以//Animal* animal02 = dynamic_cast(other);}
3.常量转换(const_cast)
该运算符用来修改类型的const属性。。
●常量指针被转化成非常量指针,并且仍然指向原来的对象;
●常量引用被转换成非常量引用,并且仍然指向原来的对象;
注意:不能直接对非指针和非引用的变量使用const_cast操作符去直接移除它的const。
//常量指针转换成非常量指针void test01(){const int* p = NULL;int* np = const_cast(p);int* pp = NULL;const int* npp = const_cast(pp);const int a = 10; //不能对非指针或非引用进行转换//int b = const_cast(a); }//常量引用转换成非常量引用void test02(){int num = 10;int & refNum = num;const int& refNum2 = const_cast(refNum);}
4.重新解释转换(reinterpret_cast)
这是最不安全的一种转换机制,最有可能出问题。
主要用于将一种数据类型从一种类型转换为另一种类型。它可以将一个指针转换成一个整数,也可以将一个整数转换成一个指针.
关键词:
【全球独家】63.C++类型转换
世界今亮点!python可变长参数
当前观察:大获成功!《最后生还者》成史上收视率最高的游戏改编剧
爆款椰子鞋停售后:阿迪在中国凉凉了
1.3kg下颜值、性能、屏幕全给你!华硕灵耀14 2023评测:续航惊人
观热点:长城汽车发布Hi4全新新能源技术:4驱享受 2驱能耗
全球关注:杠上比亚迪秦PLUS DM-i 新款日产轩逸上市:9.98万起
8GB、16GB显存的性能差多少?实测多达172%!
明解数据库------数据库存储演变史
AMD最强核显跑分上来了!但是还打不过GTX 1650 Ti
全球最新:买丰田bZ4X电动车 送一辆威驰轿车?4S店回应:活动属实
RTX 30公版显卡突然集体消失!刚刚降价40%
微头条丨公司规定不接董事长电话1次罚10000元 员工:试岗1天就走了
【全球快播报】校友承诺捐赠1100万元却不兑现被告 学校:他具备履约能力
紧跟微信步伐:支付宝掌纹支付设备外观专利获授权
【天天快播报】搅局中端市场!一加Ace2V评测:将16G满血内存进行到底
通讯!破壁机虚标功率后 疯狂小杨哥带货又翻车:面霜因虚假宣传被罚
《王者荣耀》出海“首战告捷”:登顶巴西免费游戏榜
环球报道:记录--vue3+setup+ts 知识总结
【世界速看料】程序员养发神器:拒绝加班熬夜,告别秃头!
【世界聚看点】【希尔排序ShellSort算法详解】Java/Go/Python/JS/C不同语言实现
环球微头条丨【分享贴】项目中为啥总是项目经理一人干着急?
使用PostgreSQL而不是MySQL存储中型数据有什么好处?
3000块多品牌SSD质量大PK:整体比机械硬盘可靠
玩家购入二手Switch主机:可是被卖家坑惨了
航班晚点1小时 机长提速提前20分钟到达帮助乘客换机?山航回应
每人1600元!北京发放首批“京彩·绿色”消费券:买手机PC都能用
当前热文:涉及121万辆!我国2022年新能源汽车召回量创历史新高:电池、电机缺陷多
环球最资讯丨暴风的恋人百度云_暴风的恋人
有监督学习——线性回归
禁用XXE处理漫谈
腾讯-广点通转化归因
来真的!贾跃亭:3月30日生产FF91 百万豪车来了
【天天新视野】30个汽车品牌降价 成都发放消费券:满40万可减8000元
【世界独家】华硕发布TUF Gaming M3 Gen II鼠标:仅重59g、IP56防尘防水
全球今亮点!过期1天的食物还能吃吗?
日系中的另类!国产马自达CX-50内饰发布:原汁原味引入海外版
加速资源整合,星纪魅族围绕手机、XR、前瞻技术拓展智能生态
Prompt-Engineering-Guide 学习摘要2
今日关注:电动汽车综合检测
观焦点:这几个群,程序员可千万不要进!
每日快讯!12万元买宝马“3系”?宝马中国回应降价传闻:指导价没变
当前快讯:玩家不满《魔戒:咕噜》新宣传片:他没有主角光环!
环球热讯:小米搞出“新花样”:可层叠摄像模组专利获授权
焦点快报!没有秘密了!AI或能够读取大脑重现梦境
今日快看!新老代表接力提建议将牡丹定为国花:100多个国家都有国花了
【天天报资讯】山西李家大院哪些人可以享受半价票优惠
环球新资讯:【机器学习】1. 广义线性模型
【世界新视野】密码学报如何正确Latex投稿?
环球今亮点!快 40 岁,刚被裁。。
金三银四每天一个.NET基础知识巩固(一)
今日要闻!从“13 天”到“0 天”延时,揭秘火山引擎 DataLeap SLA 保障最佳实践
世界热消息:谷歌报复性砸出5620亿参数大模型:比ChatGPT更恐怖 学术圈已刷屏
【环球播资讯】2月国产游戏出海成绩出炉:《原神》获收入和增长双料冠军
Nginx http 文件服务器 中文名称文件乱码以及不能访问下载问题 (解决全过程)
有关马的歇后语有哪些?有关马的古诗有哪些?
工科理科化现象亟待扭转!曹德旺等科学家企业喊话让学生去工厂一线真问题
【世界时快讯】委员喊话农村淘汰、封杀老头乐 网友吵翻:揭秘观点背后让人唏嘘?
隐婚男女的结局是什么?隐婚男女演员介绍
小学二年级班主任工作计划有哪些?小学二年级家长会发言稿
消防逃生的注意事项有哪些?消防逃生演练总结
旅游可持续发展的实质是什么?旅游可持续发展论文模板
英语六级考试时间安排分配是什么?英语六级考试题型简介
世界热头条丨虼蚤的读音是什么_虼蚤
描写景色的词语集锦有哪些?描写景色的段落摘抄
梁祯元为什么叫南韩贾宝玉?梁祯元为什么是队长?
中国相术十二宫都有哪些?相术十二宫实用顺口溜
田宅宫在脸上的什么位置?田宅宫代表什么?
Linux 上的开源视频字幕应用–Live Captions
全球信息:Win10专业版激活方法
【环球播资讯】kafka常用指令
剑指Notion:微软协作平台Loop即将进入公开预览阶段
当前滚动:又来一个“保时捷” 江汽EV3申报:国内首搭载46系列大圆柱电芯
160g超满足:嘉兴特产蛋黄大肉粽2.9元/只大促
环球播报:从“看不起”到“跟不上”:200多名理想汽车车主分享用车体验
热头条丨《街霸6》新解说员宣传片:日本少女冠军人美声甜!
新消息丨国内“投教第一股”九方财富登陆港股,业绩亮眼,市值逼近80亿
面向状态机编程:复杂业务逻辑应对之道
多光源渲染方案 - Many Lights Sampling
世界微动态丨在java中String类为什么要设计成final?Java面试常见问题
报道:LoadRunner——脚本优化(二)
马斯克要自建“乌托邦小镇”:员工全部搬进去 自己当“镇长”
拒绝投影行业亮度虚标!Vidda官宣三色激光全家桶新品
环球最资讯丨新一轮国内油价将于17日迎来调整:有再度搁浅可能
【环球聚看点】彻底解决“刹车争议”!电商平台上线特斯拉脚部专用记录仪:全程摄像
当前播报:简单到复杂:C#拷贝文件的3种方法
环球热门:对LSTM应用于图像的初步理解
【数论与组合数学 1】数论简介、素数、算数基本定理
JS回调地狱
天天视讯!GTX 1050 Ti就能跑!顽皮狗公布《最后生还者:Part 1》PC版配置要求
世界看点:自称12年驾龄 特斯拉Model X车主在线维权:踩刹车没反应加速撞柱子
天天观察:苹果古典音乐软件已上架:Apple Music会员免费用!中国市场随后推出
当前资讯!明基推出首款48寸OLED电竞显示器:4K 120Hz、90W反向供电
《生化危机4:重制版》PS5版疑似已偷跑 小心剧透啊
世界百事通!illustrator学习心得体会(illustrator序列号)
工厂模式进阶用法,如何动态选择对象?
迷你天猫商城代码审计
焦点简讯:K8S 性能优化 - K8S APIServer 调优
【全球聚看点】Prompt-Engineering-Guide 学习摘要1
前端设计模式——装饰者模式