デフォルトでは、ストリームによる例外の送出は行われません。8 ストリームには例外マスクが組み込まれているため、例外は明示的に呼び出す必要があります。このマスクのフラグには、それぞれ対応するエラーフラグがあります。たとえば、badbit フラグを例外マスクで設定すると、badbit フラグがストリーム状態で送信されるたびに例外の送出が発生します。以下のコードは、入力ストリーム InStr で例外を有効にする手順を示したものです。
try { InStr.exceptions(ios_base::badbit | ios_base::failbit); //1 in >> x; // その他多くのストリーム入出力を実行 } catch(ios_base::failure& exc) //2 { cerr << exc.what() << endl; throw; }
//1 | exceptions() 関数の呼び出しでは、送出する例外を発生するフラグを、ストリームの状態の中で指定します。9 |
//2 | ストリームの演算では、ios_base::failure からの派生型のオブジェクトが送出されます。したがって、この捕獲句では、原則としてすべてのストリーム例外が捕獲されます。ストリームによっては、bad_alloc など捕獲できない例外がある可能性があるため、ios_base::failure 以外の例外を送出できるように、この一般化を修飾します。以上が、C+ における例外処理のはたらきです。どのような例外が送出されるかは分かりません。 |
通常は、badbit 例外を有効にし、eofbit 例外と failbit 例外は無効にしてください。後者は例外状態を表すわけではないからです。しかし badbit では、bad_alloc 例外で表されるメモリー不足のような、深刻なエラー状態を表すことがあります。入出力ストリームで送出される例外をすべて無効にする場合は別として、badbit 例外は有効にして、eofbit と failbit は無効にしてください。
Copyright (c) 1998, Rogue Wave Software, Inc.
このマニュアルに関する誤りのご指摘やご質問は、電子メールにてお送りください。
OEM リリース, 1998 年 6 月