C の例外階層は、例外を分類するための例外クラスのさまざまな継承レベルを提供します。この階層は std::Exception クラスに基づいており、基本例外、実行時例外、および論理例外が含まれます。より具体的な例外クラスは、これらの基本クラスから派生します。例外処理メカニズムを通じて、さまざまなレベルの例外をキャッチし、必要に応じて対応する措置を講じることができます。
#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::runtime_error および
std::logic_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 サイトの他の関連記事を参照してください。