我应该捕获std::logic_error

Should i catch std::logic_error?

本文关键字:logic error std 我应该      更新时间:2023-10-16

我知道std::runtime_error和std::logic_error的区别。

那么问题来了,我是否应该捕获std::logic_error,因为如果代码中没有错误,这些异常就不应该被抛出。这些例外只存在于开发目的吗?

我会捕获它,但在调试构建中,要么转储调用堆栈,要么重新抛出它[因此应用程序以"未捕获的异常"退出]。在发布版本中,捕获程序应该打印一条消息,提示发生了什么,并且用户应该报告这个问题。

我的想法是,因为(至少有时)你的应用程序可能会遇到这些你没有遇到的不寻常的用例。只是退出一个"未捕获的异常"真的不是一个非常友好的行为。因此,做一些"不那么苛刻"的事情总是一个好主意——即使你真的无法做任何事情来纠正代码中的错误,如果用用户(可能不是程序员)可以理解的语言向用户解释发生了什么,那就太好了。

相关文章: