c++ - 是否专门执行 catch block ?

标签 c++ c++11

如果我有多个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/

相关文章:

c++ - 实现一个动态数组(我可以访问不存在的位置)

c++ - 为什么没有默认的 move 分配/move 构造函数?

c++ - 原始位图数据到 jpeg 或 png C++

c++ - C++ 中的 for 循环和性能关键应用程序

c++ - 现在对临时工程的非 const 引用?

c++ - 包含指向派生模板类的基类指针的类的赋值运算符和复制构造函数

c++ - 如何在 C++ 中以毫秒为单位输出时间?

c++ - Qt绘制垂直布局

c++ - 为什么会出现此错误?

c++ - 如何在 C++ 中使用 if else 和类型初始化?