解析C++编程中的bad_cast异常
由于强制转换为引用类型失败,dynamic_cast运算符引发bad_cast异常。
语法
catch(bad_cast) statement
备注
bad_cast的接口为:
classbad_cast:publicexception{ public: bad_cast(constchar*_Message="badcast"); bad_cast(constbad_cast&); virtual~bad_cast(); };
以下代码包含失败的dynamic_cast引发bad_cast异常的示例。
//expre_bad_cast_Exception.cpp //compilewith:/EHsc/GR #include<typeinfo.h> #include<iostream> classShape{ public: virtualvoidvirtualfunc()const{} }; classCircle:publicShape{ public: virtualvoidvirtualfunc()const{} }; usingnamespacestd; intmain(){ Shapeshape_instance; Shape&ref_shape=shape_instance; try{ Circle&ref_circle=dynamic_cast<Circle&>(ref_shape); } catch(bad_castb){ cout<<"Caught:"<<b.what(); } }
由于强制转换的对象(Shape)不是派生自指定的强制转换类型(Circle),因此引发异常。若要避免此异常,请将下列声明添加到main:
Circlecircle_instance; Circle&ref_circle=circle_instance;
然后在try块中反转强制转换的意义,如下所示:
Shape&ref_shape=dynamic_cast<Shape&>(ref_circle);