web-dev-qa-db-ja.com

C ++でのstdexceptと例外ヘッダー

<exception> のcplusplus.comリファレンスと <stdexcept> のリファレンスから、<exception>はCでの例外処理に十分であるように見えます++ 98以降のバージョンのC++。

C++に例外処理用の2つのヘッダーファイルがあるのはなぜですか?これは私の発達にどのように影響しますか?どのヘッダーを使用すればよいですか?

30
Krishna Oza
  • <stdexcept>:ライブラリとプログラムの両方が一般的なエラーを報告するために使用できる一連の標準例外を定義します。

  • <exception>:標準ライブラリの要素によってスローされるすべての例外の基本クラス(つまりstd::exception)を、例外の処理を支援するいくつかのタイプとユーティリティとともに定義します。

したがって、<exception>はクラスstd::exceptionのみを定義し、<stdexcept>std::exceptionから継承するいくつかのクラスを定義します(例:std::logic_errorstd::out_of_range)。そのため、<stdexcept>には<exception>が含まれます。

std::exceptionを継承する独自の例外クラスを定義する場合(および<stdexcept>のクラスを使用しない場合)、不要な定義を回避できるため、これらは別々のヘッダーにあります。

40
101010

実用的な考慮事項の1つは、<stdexcept>にはstd::string定義が必要です(例外コンストラクターはstd::stringを受け入れ、std::stringデータメンバーを持つ)一方で、std::exceptionstd::string宣言または定義は必要ありません。

つまり、std::exceptionハンドラーには<exception>のみが必要です。スローサイトでは、スローする特定の例外クラスのヘッダーが必要です。

12

exceptionは、ユーザーが独自の例外を継承および定義するためのものです。

stdexceptは、標準の例外をキャッチして処理するためのものです。

1
snakedoctor