在类中抛出异常时,程序员的工作是确保在类中捕获此异常吗?或者假设此异常将在主文件/运行程序中捕获是最佳实践吗?我相信是后者,但我有点不确定......采用以下代码:
#include <stdexcept>
#include <iostream>
using namespace std; // supposedly trustworthy duck
class Duck
{
public:
Duck(int quack_nominee);
private:
int quack_strength;
};
Duck::Duck(int quack_nominee)
{
if (quack_nominee < 0)
{
throw runtime_error("A quack having a negative value produces undefined behavior on reality.");
}
quack_strength = quack_nominee;
}
上面的代码是好的做法吗?我假设抛出的 runtime_error 将在某处被捕获。如果使用我的类的程序员没有实现 try-catch 块,.exe 文件将崩溃(至少在我的 IDE 和编译器上)。
另外,如果我应该在类本身中有一个 try-catch 块,是否有可能合法地实现它?
异常的全部意义在于终止函数的执行流程,并通知调用者无法在函数内处理的错误条件。所以不,您绝对不必捕获自己的异常,因为它违背了异常的目的。
另一个问题是您应该使用异常报告什么样的错误。这主要取决于特定用例,但最常见的情况是无效的输入参数或外部错误(例如来自 OS 或 DB 或程序外的任何内容),在不违反“最小意外原则”的情况下无法在您的函数中处理。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句