#include<iostream>
#include<exception>
using namespace std;
int main()
{
try{
try{
throw 20;
}catch(...)
{
cout<<"Unknown exception in inner block"<<endl;
throw;
}
}catch(int e)
{
cout<<"Integer Exception "<<e<<endl;
}catch(...)
{
cout<<"Unknown exception in outer block"<<endl;
}
}
上面的代码给出了输出:
Unknown exception in inner block
Integer Exception 20
我在回答中读到,无法在catch all块中确定异常。
答案 0 :(得分:2)
当您编写throw;
时,C ++编译器会通过引用重新捕获捕获的异常。
除非拦截catch (...)
声明,否则几乎就好像std::cout
不存在一样。
所以它在int e
捕获网站上被重新捕获。
C ++ 11在某种程度上允许您在catch块中捕获异常,包括 catch (...)
,但是没有可移植的方法来检查{}中捕获的异常{1}}阻止。请参阅http://en.cppreference.com/w/cpp/error/current_exception。
答案 1 :(得分:1)
重新抛出异常不会生成新的异常对象。相反,它继续抛出相同的异常对象。
18.1抛出异常[except.throw]
- ...如果处理程序通过重新抛出退出,则控制权将传递给同一异常对象的另一个处理程序。
醇>