Sun Studio 12 Update 1: C++ ユーザーズガイド

14.3.1.2 出力エラーの処理

operator<< を多重定義するときは、iostream ライブラリからエラーが通知されることになるため、特にエラー検査を行う必要はありません。

エラーが起こると、エラーの起こった iostreamエラー状態になります。その iostream の状態の各ビットが、エラーの大きな分類に従ってセットされます。iostream で定義された挿入子がストリームにデータを挿入しようとしても、そのストリームがエラー状態の場合はデータが挿入されず、iostream の状態も変わりません。

一般的なエラー処理方法は、メインのどこかで定期的に出力ストリームの状態を検査する方法です。そこで、エラーが起こっていることがわかれば、何らかの処理を行います。この章では、文字列を出力してプログラムを中止させる関数 error をユーザーが定義しているものとして説明します。error は事前定義された関数ではありません。error 関数の例は、「14.3.9 入力エラーの処理」を参照してください。iostream の状態を調べるには、演算子 ! を使用 します。iostream がエラー状態の場合はゼロ以外の値を返します。たとえば、次のようにします。


if (!cout) error("output error");

エラーを調べるにはもう 1 つの方法があります。ios クラスでは、operator void *() が定義されており、エラーが起こった場合は NULL ポインタを返します。したがって、次の文でエラーを検査できます。


if (cout << x) return; // return if successful

また、次のように ios クラスのメンバー関数 good を使用することもできます。


if (cout.good()) return; // return if successful

エラービットは次のような列挙型で宣言されています。


enum io_state {goodbit=0, eofbit=1, failbit=2,
badbit=4, hardfail=0x80};

エラー関数の詳細については、iostream のマニュアルページを参照してください。