




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
关于C+的强制类型转换以下内容整理自互联网。整理人:Lybe Liu文中教材指的是+语言程序设计(第版),作者是郑莉等,清华大学出版社会出版。教材上提到这4种转换的地方分别是:P36(概述),P244(reinterpret_cast),P246(const_cast),P337显式转换也被称为强制类型转换(cast),包括下列命名的强制类型转换操作符static_cast dynamic_cast const_cast 和reinterpret_cast。static_cast、const_cast和reinterpret_cast三种类型转换操作符的功能,都可以用标准C+之前的两种类型转换语法来描述。之所以细分,是为了“语义更加明确,也就不容易出错”。static_cast它用来进行比较安全的、基于内容的数据类型转换(编译器会生成代码进行转换)。基本数据类型之间的转换都适用于static_cast。用法:static_cast ( exdivssion )该运算符把exdivssion转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法:用于类层次结构中基类和子类之间指针或引用的转换。进行上行转换(把子类的指针或引用转换成基类表示)是安全的;进行下行转换(把基类指针或引用转换成子类表示)时,由于没有动态类型检查,所以是不安全的。用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换的安全性也要开发人员来保证。把空指针转换成目标类型的空指针。把任何类型的表达式转换成void类型。注意:static_cast不能转换掉exdivssion的const、volatile、或者_unaligned属性。例子: class B . ;class D : public B . ;void f(B* pb, D* pd) D* pd2 = static_cast(pb); / 不安全, pb可能只是B的指针 B* pb2 = static_cast(pd); / 安全的 .reinterpret_cast任何指针都可以转换成其它类型的指针,T必须是一个指针、引用、算术类型、指向函数的指针或指向一个类成员的指针。表达式reinterpret_cast( a )能够用于诸如char* 到 int*,或者One_class* 到 Unrelated_class*等类似这样的转换,因此可能是不安全的。例子:class A . ;class B . ;void f() A* pa = new A; void* pv = reinterpret_cast(pa); / pv 现在指向了一个类型为B的对象,这可能是不安全的 .reinterpre_cast 通常对于操作数的位模式执行一个比较低层次的重新解释,它的正确性很大程度上依赖于程序员的主动管理。A reinterpret_cast generally performs a low-level reinterpretation of the bit pattern of its operands, and its correctness in large part depends on the active management of the programmer.const_cast将数据类型中的const属性去除。表达式const_cast( a )被用于从一个类中去除以下这些属性:const, volatile, 和 _unaligned。例子1:void foo(const int *cp)int *p = const_cast(cp); / 转换以后通过得到的指针修改cp指向的常量。(*p)+; 例子2:class A . ;void f() const A *pa = new A; / const对象 A *pb; / 非const对象/ pb = pa; / 这里将出错,不能将const对象指针赋值给非const对象 pb = const_cast(pa); / 现在OK了.dynamic_cast通常在基类和派生类之间转换时使用, 是run-time cast。dynamic_cast 支持在运行时刻识别由指针或引用指向的类对象(The dynamic_cast supports the run-time identification of class objects addressed either by a pointer or reference.)转换前类型必须是指向多态类型的指针(即要有虚函数),或多态类型的引用,否则编译会出错。这是由于运行时类型检查需要运行时类型信息,而这个信息存储在类的虚函数表。用法:dynamic_cast( a )该运算符把a转换成T类型的对象。T必须是类的指针、类的引用或者void *;如果T是类指针类型,那么a也必须是一个指针,如果T是一个引用,那么a也必须是一个引用。它可以将基类的指针或引用转换为派生类的指针或引用。它在转换前会检查指针(或引用)所指向对象的实际类型是否与转换的目的类型兼容,如果兼容转换才会发生,才能得到派生类的指针(或引用),否则: 如果执行的是指针类型的转换,会得到空指针; 如果执行的是用引用类型的转换,会抛出异常。例子1:class A . ;class B . ;void f() A* pa = new A;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 草原生态补偿机制考核试卷
- 电机在循环经济模式中的应用考核试卷
- 电容器在空调与制冷设备中的效率提升考核试卷
- 蛋品营销策略与消费者行为研究考核试卷
- 服饰企业的创新与生产考核试卷
- 搪瓷卫生洁具的市场调研与消费者行为考核试卷
- 计算机组装与硬件维护考核试卷
- 聚苯乙烯湿法纺丝考核试卷
- 窄轨机车车辆设计与制造标准符合性考核试卷
- 租赁农机的节能减排考核试卷
- 人教版九年级数学上册一元二次方程《一元二次方程整 理与复习》示范公开课教学课件
- 平安证券公司融资融券业务方案设计
- 2024秋期国家开放大学专科《液压与气压传动》一平台在线形考(形考任务+实验报告)试题答案
- 推拿店合同范例
- 宁德时代推出“宁家服务”
- 消防安全重点工种人员情况
- 急救包扎课件
- 广告策划方案-今麦郎方便面广告策划书
- 2024年高考真题-物理(贵州卷) 含解析
- 金融领域大语言模型应用安全探析
- 2024年浙江省中考社会试卷真题(含标准答案及评分标准)
评论
0/150
提交评论