## 8.2 ストリーム状態の検査

まず、ストリーム状態でエラーを検査する方法を説明します。ストリームには、エラーを検査するためのいくつかのメンバー関数があります。これを表 9 にまとめます。

#### 表 9 -- エラー検査用のストリームメンバー関数

ios_base メンバー関数 | 機能
--- | ---
`bool good()` | エラーフラグが設定されていないと真
`bool eof()` | `eofbit` の設定時に真
`bool fail()` | `failbit` か `badbit` の設定時に真
`bool bad()` | `badbit` の設定時に真
`bool operator!()` | `fail()` と同様
`operator void*()` | `fail()` の場合 NULL ポインタ、それ以外は非 NULL 値
`iostate rdstate()` | ストリーム状態の値

重要な部分でストリームの状態を調べるのは良い方法です。次にその例を示します。

>     if (!cout) error();

`cout` の状態を `operator!()` で調べます。ストリーム状態がエラーになっている場合は、`true` が返ります。

ブール型の位置には、次のようなテストのために出力ストリームを設定することもできます。

>     if (cout << x) // okay!

ここでの要点は `operator void*()` です。この関数は、ストリーム状態が非ゼロのときに非ゼロ値を返します。

最後に、明示的なメンバー関数も使用できます。

>     if (cout << x, cout.good()) // okay!;

`good()` と `operator!()` には、次の違いがあります。つまり、関数 `good()` ではすべてのフラグが認識され、`operator!()` と `fail()` では `eofbit` が無視されます。

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

OEM リリース, 1998 年 6 月