zoukankan      html  css  js  c++  java
  • 关于std::bad_cast异常

    什么是bad_cast异常?

    当对引用类型的动态转换未通过运行时检查(例如,因为类型与继承无关)时,将引发此类型的异常。

    继承关系

    class bad_cast : public exception

    例子:

    // expre_bad_cast_Exception.cpp
    // compile with: /EHsc /GR
    #include <typeinfo>
    #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();
       }
    }

    备注

    一定要注意,对引用进行转换时才可能触发此异常。如果时指针,则返回NULL。

    如果表达式正在取消对指针的引用,而该指针的值为零,则typeid将引发一个bad_typeid异常。如果指针没有指向有效的对象,则抛出一个“__non_rtti_object。它表示试图分析由于对象无效而触发错误的RTTI。(例如,它是一个错误的指针,或者代码不是用/GR编译的)。

  • 相关阅读:
    一些术语
    Professional Frontend Engineering
    爱上阿森纳,爱上一种信仰
    ThinkPHP 和 UCenter接口的冲突
    这个城市
    来自Google的10条价值观
    如何将Gb2312转为unicode?
    未完成的代码(JS)
    微软也用PHP?!
    博客园对"公告"的Js进行了过滤
  • 原文地址:https://www.cnblogs.com/yilang/p/13815858.html
Copyright © 2011-2022 走看看