如果我有多个catch block ,在程序执行过程中,首先抛出一个异常,在堆栈展开时,抛出第二个异常,catch block 是只捕获最外层的异常还是捕获所有签名匹配的异常抓 block ?
最佳答案
如果“在堆栈展开期间,抛出第二个异常”,并且第二个异常通过与第一个异常展开的相同的函数堆栈帧(即,第二个异常离开被展开的对象的析构函数)第一个异常(exception)),std::terminate
将被调用。因此,每次只有一个异常会到达任何特定的 try
block 。
这是 C++11 将所有析构函数默认为 noexcept
的部分原因。
关于您标题中的问题,是的,catch
block 是排他的;第一个匹配的 catch
block 将被执行,其他的将被跳过。
关于c++ - 是否专门执行 catch block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49261144/