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 のマニュアルページを参照してください。