Rogue Wave バナー
前へマニュアルの先頭へ目次次へ

8.3 例外の捕獲

デフォルトでは、ストリームによる例外の送出は行われません。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 例外は有効にして、eofbitfailbit は無効にしてください。



前へマニュアルの先頭へ目次次へ

Copyright (c) 1998, Rogue Wave Software, Inc.
このマニュアルに関する誤りのご指摘やご質問は、電子メールにてお送りください。


OEM リリース, 1998 年 6 月