您的位置:首页 > 编程语言 > C语言/C++

C++中的dynamic_cast和static_cast

2016-05-24 12:00 405 查看
代码:

#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;
}


输出:

0
0x7fff4f697300
i am A


分析:

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

static_cast则没有这个要求,但在无关类指针转换时,编译器会报错,提升了安全性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: