c-为什么要按基数对派生类进行捕获?

对于下面的代码,结果为“ EA Exception Finished”,这意味着尽管我们将其扔给了基类捕获的派生类.总是这样吗?如果是这样,如何使派生类捕获,从而出现“ EB异常完成”?

另外,我不能通过抛出EB()和catch(EA&)来确切地理解它的含义. catch(EA&)是否意味着catch块获取EA对象的引用?

对不起,对不起.如果您向我推荐一本有关异常结构的书或其他参考资料,那将是很大的帮助.

class EA {};
class EB: public EA {};

void F()
{
  throw EB();  // throw at EB().
}

int main()
{
  try
  {
    F();
  }
  catch(EA&) // caught here??
  {
    std::cout<<"EA Exception";
  }
  catch(EB&) // why not me? every time?
  {
    std::cout<<"EB Exception";
  }

  std::cout<<" Finished"<<std::endl;

  return 0;
}

解决方法:

原因:

Upcasting

派生类的基础.因此总是卡在第一个陷阱上.

上一篇:C++进阶-异常处理


下一篇:Javascript 跳出map,forEach等方法解决方案