C++中的dynamic_cast和static_cast

时间:2023-03-10 01:50:54
C++中的dynamic_cast和static_cast

代码:

 #include <cstdio>
#include <iostream> using namespace std; class A{
public:
virtual void print(){
cout<<"i am A"<<endl;
}
}; class B:public A{
public:
}; int main(){ A a;
B b;
A* pA = dynamic_cast<A*>(&b);
B* pB = dynamic_cast<B*>(&a);//会出现警告
cout<<pB<<endl;
pB = static_cast<B*>(&a);
cout<<pB<<endl;
pB->print(); return ;
}

输出:

0
0x7fff4f697300
i am A

分析:

dynamic_cast下行转换(基类到子类)时要求基类是多态的,如果发现下行转换不安全,dynamic_cast返回一个null指针;

static_cast则没有这个要求,但在无关类指针转换时,编译器会报错,提升了安全性。