C++ static_cast、dynamic_cast

static_cast:
类似于c++里面的强制类型转换,在编译器就完成,转型错误会报错

  • 原有的自动类型转换,例如 short 转 int、int 转 double、const 转非 const、向上转型等;
  • void 指针和具体类型指针之间的转换,例如void *转int *、char *转void *等;
  • 有转换构造函数或者类型转换函数的类与其它类型之间的转换,例如 double 转 Complex(调用转换构造函数)、Complex 转 double(调用类型转换函数)。
  • 不能把const转成非const类型

dynamic_cast
用于具有虚函数的派生类与基类直接的指针或者引用的转换,但是有额外的开销,
这东西在运行的时候检测
如果其实质上就是一个子类的指针,在转换为子类的时候是可以成功的

class A{
     
public:
    virtual void f(){
     

    }
};
class B:public A{
     
public:
    virtual void f(){
     

    }
};
int main()
{
     
    A* a=new B();
    B* b=new B();
    if(b = dynamic_cast<B*>(a)){
     
        cout<<"yes";
    }
    else{
     
        cout<<"no";
    }
}

如果没有虚函数或者本身的实质是一个父类的指针,那么在转换的时候是不成功的

你可能感兴趣的:(c++)