C++中的dynamic_cast和static_cast

Posted hu983

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++中的dynamic_cast和static_cast相关的知识,希望对你有一定的参考价值。

代码:

 1 #include <cstdio>
 2 #include <iostream>
 3 
 4 using namespace std;
 5 
 6 class A{
 7     public:
 8         virtual void print(){
 9             cout<<"i am A"<<endl;
10         }
11 };
12 
13 class B:public A{
14     public:
15 };
16 
17 int main(){
18 
19     A a;
20     B b;
21     A* pA = dynamic_cast<A*>(&b);
22     B* pB = dynamic_cast<B*>(&a);//会出现警告
23     cout<<pB<<endl;
24     pB = static_cast<B*>(&a);
25     cout<<pB<<endl;
26     pB->print();
27     
28     return 0;
29 }

输出:

0
0x7fff4f697300
i am A

 分析:

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

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

以上是关于C++中的dynamic_cast和static_cast的主要内容,如果未能解决你的问题,请参考以下文章

const_cast,static_cast,dynamic_cast,reinterpret_cast的区别(转)

dynamic_cast 与 typeid

static_cast和dynamic_cast详解

C++的类型转换:static_castdynamic_castreinterpret_cast和const_cast(dynamic_cast还支持交叉转换,const_cast将一个类的con

关于C++中的类型转换

c++强制类型转换:dynamic_castconst_cast static_castreinterpret_cast