问题描述
如果我知道代码中没有程序员定义的异常,只想捕获标准库抛出的异常,那么只写catch (std::exception& e)
就够了,还是要在它后面写{ {1}} ?
catch (...)
所以基本上这是一个问题,我能否确定来自 int main()
{
try
{//something
}
catch (std::exception& e) { /*something*/}
catch (...) {/*something*/} //unnecessary?
}
方法和函数的所有 throw
都是从 std
派生的异常?
解决方法
我的回答:视情况而定。
您捕获异常的目的是什么?你能做些什么吗?您是简单地记录它的存在,还是向用户做出友好的报告而不是崩溃?代码库有多大?您有多确定没有抛出不属于标准异常层次结构的异常?
我有时会这样做,通常是当我遇到未捕获的异常并试图对其进行调试时。我会把 catch (...)
放在里面,以防有人卡住 throw 42;
或其他同样出色的东西。但一般来说,我并没有真正在实际代码中使用它们。
是的,cppreference 说:
标准库产生的所有异常都继承自 标准::异常。