【发布时间】:2019-10-08 06:57:02
【问题描述】:
我们知道如果异常当前处于活动状态并且有另一个对 throw 的调用,则会调用 terminate()。
想了解是什么原因导致这与catch 块从内部执行throw 的情况有所不同?我假设如果一个 catch 块正在执行,它表示一个活动异常。
class exception_type{}
try{ ... throw obj; ...
}catch(exception_type& obj){
...
...
throw x;
...
}
从这个代码示例中,由于我们在 catch 块中有另一个 throw,它应该被动态封闭的 try 块中的另一个处理程序捕获。
所以这似乎是在catch 内有效使用throw。但是此时我们已经有一个异常活动。为什么不应该调用terminate()?或者换句话说,gcc 的 c++ 运行时如何准确地识别已经存在一个异常活动并且需要调用 terminate()。
【问题讨论】:
-
我说的是在 catch 块中投掷。它不必与最初抛出的异常对象相同。
-
@VTT 谢谢,这次我尝试了示例。