计算机二级辅导之C++强制类型转换教材.docVIP

计算机二级辅导之C++强制类型转换教材.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机二级辅导++强制类型转换考试宝小编搜集整理了计算机二级的相关知识点,希望对广大考生有所帮助。 考试宝衷心祝愿广大考生顺利通过考试。 dynamic_cast: 通常在基类和派生类之间转换时使用,run-time cast   const_cast: 主要针对const和volatile的转换.   static_cast: 一般的转换,no run-time check.通常,如果你不知道该用哪个,就用这个。   reinterpret_cast: 用于进行没有任何关联之间的转换,比如一个字符指针转换为一个整形数。   1)static_castT*(a)[/b]   编译器在编译期处理   将地址a转换成类型T,T和a必须是指针、引用、算术类型或枚举类型。   表达式static_castT*(a), a的值转换为模板中指定的类型T。在运行时转换过程中,不进行类型检查来确保转换的安全性。   static_cast它能在内置的数据类型间互相转换,对于类只能在有联系的指针类型间进行转换。可以在继承体系中把指针转换来、转换去,但是不能转换成继承体系外的一种类型   class A { ... };   class B { ... };   class D : public B { ... };   void f(B* pb, D* pd)   {   D* pd2 = static_castD*(pb); // 不安全, pb可能只是B的指针   B* pb2 = static_castB*(pd); // 安全的   A* pa2 = static_castA*(pb); //错误A与B没有继承关系   ...   }   2)dynamic_castT*(a)[/b]   在运行期,会检查这个转换是否可能。   完成类层次结构中的提升。T必须是一个指针、引用或无类型的指针。a必须是决定一个指针或引用的表达式。   dynamic_cast 仅能应用于指针或者引用,不支持内置数据类型   表达式dynamic_castT*(a) 将a值转换为类型为T的对象指针。如果类型T不是a的某个基类型,该操作将返回一个空指针。   它不仅仅像static_cast那样,检查转换前后的两个指针是否属于同一个继承树,它还要检查被指针引用的对象的实际类型,确定转换是否可行。   如果可以,它返回一个新指针,甚至计算出为处理多继承的需要的必要的偏移量。如果这两个指针间不能转换,转换就会失败,此时返回空指针(NULL)。   很明显,为了让dynamic_cast能正常工作,必须让编译器支持运行期类型信息(RTTI)。 3)const_castT*(a)[/b]   编译器在编译期处理   去掉类型中的常量,除了const或不稳定的变址数,T和a必须是相同的类型。   表达式const_castT*(a)被用于从一个类中去除以下这些属性:const, volatile, 和 __unaligned。   class A { ... };   void f()   {   const A *pa = new A;//const对象   A *pb;//非const对象   //pb = pa; // 这里将出错,不能将const对象指针赋值给非const对象   pb = const_castA*(pa); // 现在OK了   ...   }   对于本身定义时为const的类型,即使你去掉const性,在你操作这片内容时候也要小心,只能r不能w操作,否则还是会出错   const char* p = 123;   char* c = const_castchar*(p);   c[0] = 1; //表面上通过编译去掉了const性,但是操作其地址时系统依然不允许这么做。   const_cast操作不能在不同的种类间转换。相反,它仅仅把一个它作用的表达式转换成常量。它可以使一个本来不是const类型的数据转换成const类型的,或者把const属性去掉。   尽量不要使用const_cast,如果发现调用自己的函数,竟然使用了const_cast,那就赶紧打住,重新考虑一下设计吧。 4)reinterpret_castT*(a)[/b]   编译器在编译期处理   任何指针都可以转换成其它类型的指针,T必须是一个指针、引用、算术类型、指向函数的指针或指向一个类成员的指针。   表达式reinterpret_castT*(a)能够用于诸如char* 到 int*,或者One_class* 到 Unrelated_class*等类似这样的转换,因此可能是不安全的。   class A { ... }

文档评论(0)

xiaofei2001128 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档