<exception>
のcplusplus.comリファレンスと <stdexcept>
のリファレンスから、<exception>
はCでの例外処理に十分であるように見えます++ 98以降のバージョンのC++。
C++に例外処理用の2つのヘッダーファイルがあるのはなぜですか?これは私の発達にどのように影響しますか?どのヘッダーを使用すればよいですか?
<stdexcept>
:ライブラリとプログラムの両方が一般的なエラーを報告するために使用できる一連の標準例外を定義します。
<exception>
:標準ライブラリの要素によってスローされるすべての例外の基本クラス(つまりstd::exception
)を、例外の処理を支援するいくつかのタイプとユーティリティとともに定義します。
したがって、<exception>
はクラスstd::exception
のみを定義し、<stdexcept>
はstd::exception
から継承するいくつかのクラスを定義します(例:std::logic_error
、std::out_of_range
)。そのため、<stdexcept>
には<exception>
が含まれます。
std::exception
を継承する独自の例外クラスを定義する場合(および<stdexcept>
のクラスを使用しない場合)、不要な定義を回避できるため、これらは別々のヘッダーにあります。
実用的な考慮事項の1つは、<stdexcept>
にはstd::string
定義が必要です(例外コンストラクターはstd::string
を受け入れ、std::string
データメンバーを持つ)一方で、std::exception
std::string
宣言または定義は必要ありません。
つまり、std::exception
ハンドラーには<exception>
のみが必要です。スローサイトでは、スローする特定の例外クラスのヘッダーが必要です。
exceptionは、ユーザーが独自の例外を継承および定義するためのものです。
stdexceptは、標準の例外をキャッチして処理するためのものです。