## 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` 例外は有効にして、`eofbit` と `failbit` は無効にしてください。

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

OEM リリース, 1998 年 6 月