catch块是否专门执行?

时间:2018-03-13 16:23:37

标签: c++ c++11

如果我有多个catch块,在程序执行期间,首先抛出一个异常,在堆栈展开期间抛出第二个异常,catch块只捕获最外层异常或捕获签名匹配的所有异常。抓住了?

1 个答案:

答案 0 :(得分:7)

如果“在堆栈展开期间,抛出第二个异常”,并且第二个异常经历了第一个异常展开的相同函数堆栈帧(也就是说,第二个异常会使对象的析构函数被解除第一个例外),std::terminate将被调用。因此,每个特定try块都只有一个例外。

这是C ++ 11将所有析构函数默认为noexcept的部分原因。

关于标题中的问题,是的,catch块是独占的;将执行第一个匹配的catch块,跳过其他块。