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

8.1 フラグとは

ストリームがエラー状態、というのはよくあることです。エラーが発生すると、エラーの一般カテゴリによる状態にフラグが設定されます。表 8 に、フラグとそのエラーカテゴリを示します。

表 8 -- フラグと対応するエラーカテゴリ

入出力状態フラグ エラーカテゴリ
ios_base::goodbit
すべて問題なし。
ios_base::eofbit
入力シーケンスの最後まで入力演算が行われました。
ios_base::failbit
目的の文字を入力演算で読み取ることができませんでした。または目的の文字を出力演算で生成することができませんでした。
ios_base::badbit
基本入力シーケンスや出力シーケンスの完全性が失われたことを表します。

フラグ ios_base::goodbit は実際にはフラグではなく、エラーフラグがないことを示すゼロの値です。ストリームにエラーがないことを表します。規約上では、ストリーム状態がゼロ以外になると、すべての入出力演算が無効になります。

場合によっては、eofbitfailbit の両方が設定されることがあります。ただし、この 2 つの意味は異なり、必ずしも同時に発生するわけではありません。入力シーケンスを過ぎても読み取りを行おうとすると、フラグ ios_base::eofbit が設定されます。次の 2 つの例は、その典型的な発生例です。

  1. 文字単位による抽出の場合は、最後の文字の読み取りが終了しても、ストリームは良好な状態にあり、eofbit は設定されません。ただし、続けて抽出を行おうとすると、入力シーケンス終了後の読み取りになり、eofbit が設定されます。

  2. 文字単位による読み取りではなく、たとえば整数や文字列の抽出の場合、読み取りは常に入力シーケンスの最後を過ぎても行われます。これは、区切り記号が見つかるか、入力シーケンスの最後を認識するまで、入力演算子による文字の読み取りが行われるためです。したがって、入力に ... 912749<eof> というシーケンスがあって、その整数を抽出すると、eofbit が設定されます。

読み取りや書き込み演算が失敗すると、フラグ ios_base::failbit が設定されます。たとえば、空白だけを含む入力シーケンスから整数を抽出しようとすると、整数の抽出は失敗し、failbit が設定されます。先の例で failbit が設定されるかどうかを確認してみます。

  1. 最後の抽出可能文字を読み取ると、入力シーケンスの最後を過ぎても抽出演算による読み取りが継続するだけでなく、要求した文字の抽出も失敗します。したがって、eofbit の他に failbit も設定されます。

  2. この場合は状況が異なります。整数の抽出は入力シーケンスの最後まで行われますが、入力演算は失敗せず、目的の整数の読み取りは成功します。したがって、この場合、eofbit だけが設定されます。

以上の入出力演算以外に、エラーになる状況があります。たとえば、対応するファイルを開くことができな場合は、ファイルストリームによって failbit が設定されます ( 9.2.2 節参照)。

フラグ ios_base::badbit は、基本ストリームバッファの問題を表します。次のような問題が考えられます。

一般に、badbit は、回復不可能なエラー状態を示しますが、failbit が示す状況では失敗した演算をやり直すことができる可能性があります。フラグ eofbit は単純に入力シーケンスの最後を示すだけです。

ストリームエラーの検出には、次の 2 通りの方法があります。

以上の詳細については、次の 2 つの節で説明します。


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

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


OEM リリース, 1998 年 6 月