解析C++编程中的bad_cast异常
发布时间:2020-12-16 05:45:59 所属栏目:百科 来源:网络整理
导读:由于强制转换为引用类型失败,dynamic_cast 运算符引发 bad_cast 异常。 语法 catch (bad_cast) statement 备注 bad_cast 的接口为: class bad_cast : public exception {public: bad_cast(const char * _Message = "bad cast"); bad_cast(const bad_cast v
由于强制转换为引用类型失败,dynamic_cast 运算符引发 bad_cast 异常。 catch (bad_cast) statement 备注 class bad_cast : public exception { public: bad_cast(const char * _Message = "bad cast"); bad_cast(const bad_cast &); virtual ~bad_cast(); }; 以下代码包含失败的 dynamic_cast 引发 bad_cast 异常的示例。 // expre_bad_cast_Exception.cpp // compile with: /EHsc /GR #include <typeinfo.h> #include <iostream> class Shape { public: virtual void virtualfunc() const {} }; class Circle: public Shape { public: virtual void virtualfunc() const {} }; using namespace std; int main() { Shape shape_instance; Shape& ref_shape = shape_instance; try { Circle& ref_circle = dynamic_cast<Circle&>(ref_shape); } catch (bad_cast b) { cout << "Caught: " << b.what(); } } 由于强制转换的对象 (Shape) 不是派生自指定的强制转换类型 (Circle),因此引发异常。若要避免此异常,请将下列声明添加到 main: Circle circle_instance; Circle& ref_circle = circle_instance; 然后在 try 块中反转强制转换的意义,如下所示: Shape& ref_shape = dynamic_cast<Shape&>(ref_circle); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |