std::ios_base::iostate
From cppreference.com
| typedef /*実装定義*/ iostate; |
||
| static constexpr iostate goodbit = 0; |
||
| static constexpr iostate badbit = /* 実装定義 */ static constexpr iostate failbit = /* 実装定義 */ |
||
ストリームの状態フラグを指定します。これはBitmaskTypeであり、以下の定数が定義されています。
| Constant | 説明 |
| goodbit | エラーなし |
| badbit | 回復不能なストリームエラー |
| failbit | 入出力操作が失敗しました (フォーマットエラーまたは抽出エラー) |
| eofbit | 関連付けられた入力シーケンスがファイルの終わりに達しました。 |
目次 |
[編集] eofbit
eofbitは、以下の標準ライブラリ関数によって設定されます。
- 文字列入力関数 std::getline。指定された終端文字に到達するのではなく、ストリームの終わりに到達して完了した場合。
- basic_istream::operator>>の数値入力オーバーロード。ストリームの終わりに達したときに次の文字を読み取った場合、num_get::get処理のステージ2で。解析状態によっては、同時に
failbitが設定される場合とされない場合があります。たとえば、int n; istringstream buf("1"); buf >> n;はeofbitを設定しますが、failbitは設定しません。整数1は正常に解析され、nに格納されました。一方、bool b; istringstream buf("tr"); buf >> boolalpha >> b;はeofbitとfailbitの両方を設定します。ブール値trueの解析を完了するには文字が不足していました。 - operator>>std::basic_istreamの文字抽出オーバーロード。抽出する文字数に制限がある場合(ある場合)、その制限に到達する前にストリームの終わりに達した場合。
- std::get_time I/Oマニピュレータおよびstd::time_getの解析関数(time_get::get、time_get::get_time、time_get::get_dateなど)で、期待される日付/時刻値を解析するために必要な最後の文字が処理される前にストリームの終わりに到達した場合。
- std::get_money I/Oマニピュレータおよびmoney_get::get関数で、期待される通貨値を解析するために必要な最後の文字が処理される前にストリームの終わりに到達した場合。
- フォーマットされたすべての入力関数の先頭で実行されるbasic_istream::sentryコンストラクタ。
skipwsビットが解除されていない場合(例:std::noskipwsを発行した場合)、sentryは先頭の空白文字を読み取って破棄します。この操作中にストリームの終わりに到達した場合、eofbitとfailbitの両方が設定され、入力は行われません。 - 空白文字を消費中にストリームの終わりに到達した場合のI/Oマニピュレータstd::ws(ただし、フォーマットされた入力sentryとは異なり、この場合は
failbitを設定しません)。 - ストリームの終わりに到達したときの、basic_istream::read、basic_istream::get、basic_istream::peek、basic_istream::readsome、basic_istream::ignore、およびbasic_istream::getlineの非フォーマット入力関数。
- 指定された区切り文字に到達する前にストリームの終わりに到達したときの、入力関数basic_istream::ignore。
- 即時入力関数basic_istream::readsome。basic_streambuf::in_availが-1を返す場合。
以下の関数は、副作用としてeofbitをクリアします。
ほとんどの場合、eofbitが設定されている場合、failbitも設定されることに注意してください。
[編集] failbit
failbitは、以下の標準ライブラリ関数によって設定されます。
eofbitまたはbadbitが既にストリームに設定されている場合、または先頭の空白文字を消費中にストリームの終わりに到達した場合に、すべての入力関数の先頭で実行されるbasic_istream::sentryコンストラクタ。- 実装定義の条件で、すべての出力関数の先頭で実行されるbasic_ostream::sentryコンストラクタ。
- 入力ストリームから文字が抽出されなかった場合、operator>>(std::basic_string<>)。
- 有効な複素数を抽出できなかった場合、operator>>(std::complex<>)。
- 文字が抽出されなかった場合、文字配列および単一文字オーバーロードのoperator>>。
streambuf引数がnullポインタである場合、またはstreambufに文字が挿入されなかった場合、`streambuf`オーバーロードのbasic_istream::operator>>。- 関数が文字を挿入しなかった場合、`streambuf`オーバーロードのbasic_ostream::operator<<。
- 入力ストリームから文字が抽出されなかった場合、operator>>(std::bitset<>)。
- 文字が抽出されなかった場合、またはbasic_string::max_size文字を抽出した後に終端文字に到達しなかった場合、std::getline。
- 入力が有効な値として解析できない場合、または解析された値が宛先型に収まらない場合、数値、ポインタ、およびブール値の入力オーバーロードのbasic_istream::operator>>(技術的には、それらが呼び出すnum_get::getのオーバーロード)。
- 指定されたフォーマット文字列に従って入力が曖昧に解析できない場合、時間入力マニピュレータstd::get_time(技術的には、それが呼び出すtime_get::get)。
- ロケール規則に従って入力が曖昧に解析できない場合、通貨入力マニピュレータstd::get_money(技術的には、それが呼び出すmoney_get::get)。
- 不正な入力が検出された場合、すべてのRandomNumberEngineの抽出演算子。
- 不正な入力が検出された場合、すべてのRandomNumberDistributionの抽出演算子。
- 文字を抽出できなかった場合、非フォーマット入力関数basic_istream::get。
- 文字が抽出されなかった場合、区切り文字に遭遇せずにバッファがいっぱいになった場合、または指定されたバッファサイズが1未満の場合、basic_istream::getline。
- 要求された文字がすべて抽出される前にストリームでEOF条件が発生した場合、basic_istream::read。
- 失敗した場合のbasic_istream::seekg。
- 失敗した場合のbasic_ostream::tellp。
- ファイルを開けなかった場合、ファイル名引数を受け取るstd::basic_fstream、std::basic_ifstream、およびstd::basic_ofstreamのコンストラクタ。
- ファイルを開けなかった場合、basic_fstream::open、basic_ifstream::open、およびbasic_ofstream::open。
- ファイルを閉じられなかった場合、basic_fstream::close、basic_ifstream::close、およびbasic_ofstream::close。
[編集] badbit
badbitは、以下の標準ライブラリ関数によって設定されます。
- いかなる理由であれ、出力ストリームに文字を挿入できなかった場合、basic_ostream::put。
- いかなる理由であれ、出力ストリームに文字を挿入できなかった場合、basic_ostream::write。
- 出力の完了前に出力ストリームの終わりに遭遇した場合、フォーマット出力関数 operator<<、std::put_money、およびstd::put_time。
-
rdbuf()にnullポインタを指定してストリームを初期化するために呼び出された場合、basic_ios::init。 - null
rdbuf()を持つストリームに対して呼び出された場合、basic_istream::putbackおよびbasic_istream::unget。 - 引数としてnullポインタが渡された場合、basic_ostream::operator<<(basic_streambuf*)。
- rdbuf()->sputbackc()またはrdbuf()->sungetc()がtraits::eof()を返した場合、basic_istream::putbackおよびbasic_istream::unget。
- rdbuf()->pubsync()が-1を返した場合、basic_istream::sync、basic_ostream::flush、および
unitbuf出力ストリーム上のすべての出力関数。 - 関連ストリームバッファのメンバ関数(例:
sbumpc()、xsputn()、sgetc()、overflow()など)によって例外がスローされた場合、すべてのストリームI/O関数。 - 失敗した場合(例:メモリ割り当ての失敗)、ios_base::iwordおよびios_base::pword。
[編集] 例
| このセクションは未完成です 理由: 例がありません |
[編集] 関連
以下の表は、すべての可能なios_base::iostateフラグの組み合わせに対するbasic_iosアクセッサ(good()、fail()など)の値を示しています。
| ios_base::iostateフラグ | basic_ios アクセサ | |||||||
eofbit
|
failbit
|
badbit
|
good() | fail() | bad() | eof() | operator bool | operator! |
| false | false | false | true | false | false | false | true | false |
| false | false | true | false | true | true | false | false | true |
| false | true | false | false | true | false | false | false | true |
| false | true | true | false | true | true | false | false | true |
| true | false | false | false | false | false | true | true | false |
| true | false | true | false | true | true | true | false | true |
| true | true | false | false | true | false | true | false | true |
| true | true | true | false | true | true | true | false | true |
| 状態フラグを返す ( std::basic_ios<CharT,Traits> の public メンバ関数) | |
| 状態フラグを設定する ( std::basic_ios<CharT,Traits> の public メンバ関数) | |
| 状態フラグを変更する ( std::basic_ios<CharT,Traits> の public メンバ関数) |