解析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);