我应该在 catch (exception& e) 之后写 catch (...) 吗?

问题描述

如果我知道代码中没有程序员定义的异常,只想捕获标准库抛出的异常,那么只写catch (std::exception& e)就够了,还是要在它后面写{ {1}} ?

catch (...)

所以基本上这是一个问题,我能否确定来自 int main() { try {//something } catch (std::exception& e) { /*something*/} catch (...) {/*something*/} //unnecessary? } 方法函数的所有 throw 都是从 std 派生的异常?

解决方法

我的回答:视情况而定。

您捕获异常的目的是什么?你能做些什么吗?您是简单地记录它的存在,还是向用户做出友好的报告而不是崩溃?代码库有多大?您有多确定没有抛出不属于标准异常层次结构的异常?

我有时会这样做,通常是当我遇到未捕获的异常并试图对其进行调试时。我会把 catch (...) 放在里面,以防有人卡住 throw 42; 或其他同样出色的东西。但一般来说,我并没有真正在实际代码中使用它们。

,

是的,cppreference 说:

标准库产生的所有异常都继承自 标准::异常。