在类中抛出异常时,程序员的工作是确保在类中捕获此异常吗?或者最佳做法是假设此异常将在主文件/跑步者程序中捕获?我相信它是后者,但我有些不确定....请使用以下代码:
#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块,是否可以合法地实现它?
异常的全部要点是终止函数的执行流程并通知调用者在函数内无法处理的错误条件。所以不,你绝对不必抓住自己的例外,因为它违背了例外的目的。
另一个问题是您应该使用异常报告哪种错误。这主要取决于具体的用例,但最常见的情况是无效的输入参数或外部错误(例如来自操作系统或数据库或程序之外的任何内容),如果不违反“最小意外原则”,则无法在您的功能中处理。