C++类型转换

static_cast 相近类型之间的类型

reinterpret_cast 不相近类型之间的类型

const_cast 去掉对象const属性的转换

dynamic_cast 规范向下转换,转换是安全的 是将一个基类对象指针(或引用)转换到继承类指针,dynamic_cast会根据基类指针是否真正指向继承类指针来做相应处理。  C++独有

若对指针进行dynamic_cast,失败返回null,成功返回正常cast后的对象指针;
若对引用进行dynamic_cast,失败抛出一个异常,成功返回正常cast后的对象引用。

【注意】:
1、dynamic_cast在将父类cast到子类时,父类必须要有虚函数,否则编译器会报错。
2、 dynamic_cast主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换。
在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的;
在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全

 

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

void func(A* p)
{
    B* ptr = dynamic_cast<B*>(p);

    if (ptr)
    {
        cout << "转换成功"<<endl;
    }
    else
    {
        cout << "转换失败"<<endl;
    }
}


int main()
{
    double a = 3.141;
    int b = 134;
    b = static_cast<int>(a);

    int*c = &b;
    //a = reinterpret_cast<double>(c);  不同类型无法转换
    b = reinterpret_cast<int>(c);

    const int d = 10;
    c = const_cast<int*>(&d);//只能将const的地址转为非const的地址 并且类型要相同

    A e;
    B f;

    func(&e);
    func(&f);
}

 

 

 

 

 

 
 
 
 
posted @ 2022-10-02 20:56  lemon-Breeze  阅读(14)  评论(0编辑  收藏  举报