计算机二级辅导之c强制类型转换

计算机二级辅导之c强制类型转换

ID:8843246

大小:45.50 KB

页数:5页

时间:2018-04-09

计算机二级辅导之c强制类型转换_第1页
计算机二级辅导之c强制类型转换_第2页
计算机二级辅导之c强制类型转换_第3页
计算机二级辅导之c强制类型转换_第4页
计算机二级辅导之c强制类型转换_第5页
资源描述:

《计算机二级辅导之c强制类型转换》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、计算机二级辅导之C++强制类型转换考试宝小编搜集整理了计算机二级的相关知识点,希望对广大考生有所帮助。考试宝衷心祝愿广大考生顺利通过考试。dynamic_cast:通常在基类和派生类之间转换时使用,run-timecast  const_cast:主要针对const和volatile的转换.  static_cast:一般的转换,norun-timecheck.通常,如果你不知道该用哪个,就用这个。  reinterpret_cast:用于进行没有任何关联之间的转换,比如一个字符指针转换为一个整形数。  1)stati

2、c_cast(a)[/b]  编译器在编译期处理  将地址a转换成类型T,T和a必须是指针、引用、算术类型或枚举类型。  表达式static_cast(a),a的值转换为模板中指定的类型T。在运行时转换过程中,不进行类型检查来确保转换的安全性。  static_cast它能在内置的数据类型间互相转换,对于类只能在有联系的指针类型间进行转换。可以在继承体系中把指针转换来、转换去,但是不能转换成继承体系外的一种类型  classA{...};  classB{...};  classD:publicB{..

3、.};  voidf(B*pb,D*pd)  {  D*pd2=static_cast(pb);//不安全,pb可能只是B的指针  B*pb2=static_cast(pd);//安全的  A*pa2=static_cast(pb);//错误A与B没有继承关系  ...  }  2)dynamic_cast(a)[/b]  在运行期,会检查这个转换是否可能。  完成类层次结构中的提升。T必须是一个指针、引用或无类型的指针。a必须是决定一个指针或引用的表达式。  dynamic_cast仅

4、能应用于指针或者引用,不支持内置数据类型  表达式dynamic_cast(a)将a值转换为类型为T的对象指针。如果类型T不是a的某个基类型,该操作将返回一个空指针。  它不仅仅像static_cast那样,检查转换前后的两个指针是否属于同一个继承树,它还要检查被指针引用的对象的实际类型,确定转换是否可行。  如果可以,它返回一个新指针,甚至计算出为处理多继承的需要的必要的偏移量。如果这两个指针间不能转换,转换就会失败,此时返回空指针(NULL)。  很明显,为了让dynamic_cast能正常工作,必须让编译

5、器支持运行期类型信息(RTTI)。3)const_cast(a)[/b]  编译器在编译期处理  去掉类型中的常量,除了const或不稳定的变址数,T和a必须是相同的类型。  表达式const_cast(a)被用于从一个类中去除以下这些属性:const,volatile,和__unaligned。  classA{...};  voidf()  {  constA*pa=newA;//const对象  A*pb;//非const对象  //pb=pa;//这里将出错,不能将const对象指针赋值给非co

6、nst对象  pb=const_cast(pa);//现在OK了  ...  }  对于本身定义时为const的类型,即使你去掉const性,在你操作这片内容时候也要小心,只能r不能w操作,否则还是会出错  constchar*p="123";  char*c=const_cast(p);  c[0]=1;//表面上通过编译去掉了const性,但是操作其地址时系统依然不允许这么做。  const_cast操作不能在不同的种类间转换。相反,它仅仅把一个它作用的表达式转换成常量。它可以使一个本来不是c

7、onst类型的数据转换成const类型的,或者把const属性去掉。  尽量不要使用const_cast,如果发现调用自己的函数,竟然使用了const_cast,那就赶紧打住,重新考虑一下设计吧。4)reinterpret_cast(a)[/b]  编译器在编译期处理  任何指针都可以转换成其它类型的指针,T必须是一个指针、引用、算术类型、指向函数的指针或指向一个类成员的指针。  表达式reinterpret_cast(a)能够用于诸如char*到int*,或者One_class*到Unrelated_

8、class*等类似这样的转换,因此可能是不安全的。  classA{...};  classB{...};  voidf()  {  A*pa=newA;  void*pv=reinterpret_cast(pa);  //pv现在指向了一个类型为B的对象,这可能是不安全的  ...  }  使用reinterpret_c

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。