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的区别(转)
C++的类型转换:static_castdynamic_castreinterpret_cast和const_cast(dynamic_cast还支持交叉转换,const_cast将一个类的con
c++强制类型转换:dynamic_castconst_cast static_castreinterpret_cast