强制类型转换运算符.doc

强制类型转换运算符.doc

ID:58483578

大小:16.50 KB

页数:3页

时间:2020-09-03

强制类型转换运算符.doc_第1页
强制类型转换运算符.doc_第2页
强制类型转换运算符.doc_第3页
资源描述:

《强制类型转换运算符.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、标准c++中主要有四种强制转换类型运算符:   const_cast,reinterpret_cast,static_cast,dynamic_cast等等。    1、static_cast  是静态转换,只能用于类型兼容的转换(由宽向窄),  无RUNTIME损耗  可以用来对多态对象的指针进行高效的downcasting,但是当被转换的指针实际上指向错误的派生类时,它没有提供错误检测         static_cast(expression)将expression转换到独立地基于表达式中给出的类型type_id类

2、型。没有运行类型检查被执行以确保转换的安全性。static_cast运算符可被用在例如转换一个基类指针到一个派生类指针的操作,这样的转换不总是安全的,相对而言,dynamic_cast是安全的。   (注意:static_cast<>()转换只是返回当前强制类型转换过后的值,也就是说,使用该操作符进行强制类型转换的时候,并不改变用于转换的源值,而只是暂时借用源值转换并保存值,所以要定义另外一个变量来保存转换以后的值。)   例: class B { ... }; class D : public B { ... }; vo

3、id f(B* pb, D* pd) {     D* pd2 = static_cast(pb);        // 不安全, pb可能只是B的指针     B* pb2 = static_cast(pd);        // 安全的     ... }    2、dynamic_cast  是动态转换,主要用于base向derived的转换,就是说对象本身包含了自己的type  information,这个type  information在转换过程中不会损失     例: class A { ..

4、. }; class B { ... }; void f() {    A* pa = new A;    B* pb = new B;    void* pv = dynamic_cast(pa);    // pv 现在指向了一个类型为A的对象    ...    pv = dynamic_cast(pb);    // pv 现在指向了一个类型为B的对象 }    3、reinterpret_cast运算符允许任何指针被转换到任何其它指针类型,它还允许任何整型转换到任意指针类型,且反之亦然

5、。滥用reinterpret_cast运算符可轻易导致不安全,除非是所期望的转换是固有的低等级,否则你应使用其它转换运算符之一。   例: class A { ... }; class B { ... }; void f() [Page]{    A* pa = new A;    void* pv = reinterpret_cast(pa);    // pv 现在指向了一个类型为B的对象,这可能是不安全的    ... }    4、const_cast运算符可被用于从一个类中除去const、volatile

6、和_  _unaligned属性任何对象类型的指针或一个数据成员的指针可被显式地转换到完全相同的类型,带const,volatile和__unaligned限定符除外。对指针和引用,结果将指向源对象,对数据成员指针结果和数据成员的源指针一样指向同一成员。由于依赖于引用对象的类型,通过指针、引用或数据成员指针的求结果的写操作将产生未定义的动作     例: class A { ... }; void f() {   const A *pa = new A;//const对象   A *pb;//非const对象 //pb =

7、 pa; // 这里将出错,不能将const对象指针赋值给非const对象   pb = const_cast(pa); // 现在OK了 ... }

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

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

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