在类中抛出异常的最佳方法是什么

What is the best way to throw exceptions in classes?

本文关键字:最佳 方法 是什么 抛出异常      更新时间:2023-10-16

当在类中抛出异常时,程序员的工作是确保在类中捕获此异常吗? 还是最佳实践是假设此异常将在主文件/运行器程序中捕获? 我相信是后者,但我有点不确定....采用以下代码:

#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 块,是否有可能合法地实现它?

异常的全部要点是终止函数的执行流,并通知调用方函数内无法处理的错误条件。所以不,你绝对不必抓住你自己的异常,因为它违背了异常的目的。

另一个问题是您应该使用异常报告哪种类型的错误。这主要取决于特定的用例,但最常见的情况是无效的输入参数或外部错误(例如,来自操作系统或数据库或程序外部的任何内容(,这些错误无法在不违反"最小意外原则"的情况下在函数中处理。