bad_cast

来源:互联网 发布:文本简繁体转换软件 编辑:程序博客网 时间:2024/04/30 22:15
首先学习一下bad_cast 

在微软的解释:The bad_cast exception is thrown by thedynamic_cast operator as the result of a failed cast to a reference type.

 

catch (bad_cast)   statement

 

bad_cast 的接口是: 

class bad_cast : public exception {public:   bad_cast(const char * _Message = "bad cast");   bad_cast(const bad_cast &);   virtual ~bad_cast();};

最新的VS2012的代码是:

class _CRTIMP_PURE bad_cast : public exception {public:#ifdef _M_CEE_PURE    __CLR_OR_THIS_CALL bad_cast(const char * _Message = "bad cast")        : exception(_Message)    {}    __CLR_OR_THIS_CALL bad_cast(const bad_cast &_That)        : exception(_That)    {}    virtual __CLR_OR_THIS_CALL ~bad_cast() _NOEXCEPT    {}#else   /* _M_CEE_PURE */    __CLR_OR_THIS_CALL bad_cast(const char * _Message = "bad cast");    __CLR_OR_THIS_CALL bad_cast(const bad_cast &);    virtual __CLR_OR_THIS_CALL ~bad_cast() _NOEXCEPT;#endif  /* _M_CEE_PURE */};



 

// 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();   }}


 

 

原创粉丝点击