zoukankan      html  css  js  c++  java
  • stl中的类型转换

    static_cast     dynamic_cast      const_cast     reinterpret_cast

    1、static_cast

     可以把static_cast看做一个强制转换的操作。没有什么好说的。

    2、dynamic_cast

    类的继承关系图:【A为基类】

    void f(D* pd)
    {
       E* pe = dynamic_cast<E*>(pd); // 由D-->E的转换
      B* pb = pe; // 向上转换,隐式转换
    A* pa = pb; // 向上转换,隐式转换


    } 还存在一种交叉转换,如 D --->B 的转换。。。,这在static_cast是不可能执行的转换的。
    如下面的代码:
    View Code
     1 #include <iostream>
     2 using namespace std;
     3 
     4 class B
     5 {
     6 /*public:
     7     virtual void fun ()
     8     {}*/
     9 };
    10 
    11 class C
    12 {
    13 public:
    14     virtual void fun ()
    15     {}
    16 };
    17 
    18 class D : public B, public C 
    19 {
    20 
    21 };
    22 
    23 void  main()
    24 {
    25     B *pb = new B;
    26     C *pc = new C;
    27     
    28 /*    B *pb2 = static_cast<B*>(pc);   // 会报错...
    29     if(pb2 == NULL)
    30     {
    31         cout << "转换错误" << endl;
    32     }
    33 */
    34     B *pb3 = dynamic_cast<B*>(pc);
    35     if(pb3 == NULL)
    36     {
    37         cout << "转换错误" << endl;
    38     }
    39 }
    注:dynamic_cast还存在一个动态检测的功能,如果没有正确转换,dynamic_cast返回的是NULL。

  • 相关阅读:
    java的应用项目
    项目评审ppt的纲要
    Spark环境搭建
    spark 环境搭建坑
    redis cluster 实现
    hadoop环境搭建编译
    centos 网络配置
    自定义shell开头PS1
    Centos. Mac 通过nfs 搭建共享目录
    mac系统中实现vitualBox中访问内网端口
  • 原文地址:https://www.cnblogs.com/xuxu8511/p/2438544.html
Copyright © 2011-2022 走看看