如何解决我应该在 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 说:
标准库产生的所有异常都继承自 标准::异常。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。