ホームページ  >  記事  >  バックエンド開発  >  C++ 関数の例外処理で例外階層を分割するにはどうすればよいですか?

C++ 関数の例外処理で例外階層を分割するにはどうすればよいですか?

WBOY
WBOYオリジナル
2024-04-15 18:48:021096ブラウズ

C の例外階層は、例外を分類するための例外クラスのさまざまな継承レベルを提供します。この階層は std::Exception クラスに基づいており、基本例外、実行時例外、および論理例外が含まれます。より具体的な例外クラスは、これらの基本クラスから派生します。例外処理メカニズムを通じて、さまざまなレベルの例外をキャッチし、必要に応じて対応する措置を講じることができます。

C++ 函数异常处理中的异常层级如何划分?

#C 関数例外処理における例外階層

C では、例外オブジェクトの異常状況をスローすることで関数例外処理を報告できます。 。さまざまな例外を分類するために、C では例外階層が導入されています。例外階層は、例外オブジェクトにさまざまなレベルの情報を提供する標準ライブラリによって定義された例外クラスの継承階層です。

1. 例外クラスの継承階層

例外階層は、

std::Exception クラスをルートとする継承階層です:

class std::exception {
public:
    virtual ~exception() noexcept = default;
    virtual const char* what() const noexcept = 0;
};

// 基本异常类
class std::runtime_error : public std::exception {
public:
    runtime_error(const char* whatArg) : whatArg_(whatArg) {}
    virtual const char* what() const noexcept override { return whatArg_; }

private:
    const char* whatArg_;
};

// 派生异常类
class std::logic_error : public std::runtime_error {
public:
    logic_error(const char* whatArg) : runtime_error(whatArg) {}
};

2. 例外階層の分割

例外階層は例外クラスをさまざまなレベルに分割します:

  • 基本例外 (std::例外): すべての例外状況を表す基本クラス。
  • 実行時例外 (std::runtime_error): メモリ割り当ての失敗やファイルのオープン失敗など、プログラムの実行中に発生する例外を示します。
  • ロジック例外 (std::logic_error): 不正なパラメータや無効なステータスなど、プログラム ロジックのエラーを示します。
より具体的な例外クラスは、

std::runtime_error および std::logic_error から派生します。例:

  • std::bad_alloc: メモリの割り当てに失敗しました。
  • std::invalid_argument: パラメータが無効です。
  • std::range_error: 範囲エラー (配列の添字が範囲外など)。

3. 実際のケース

次の関数を考えてみましょう:

int divide(int numerator, int denominator) {
    if (denominator == 0) {
        throw std::invalid_argument("denominator cannot be zero");
    }
    return numerator / denominator;
}

denominator が 0 の場合、この関数はstd::invalid_argument 例外をスローします。この例外は std::logic_error レベルに属し、プログラム ロジック内の無効なパラメーター エラーを表します。

divide 関数を呼び出すとき、例外処理メカニズムを使用して例外をキャッチできます。

try {
    int result = divide(10, 2);
    std::cout << "Result: " << result << std::endl;
} catch (const std::invalid_argument& e) {
    std::cerr << "Error: " << e.what() << std::endl;
}

この場合、

denominator が When 0 の場合、std::invalid_argument 例外がキャッチされ、エラー メッセージが出力されます。

以上がC++ 関数の例外処理で例外階層を分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。