C++ 名前付き要件: UnformattedInputFunction
From cppreference.com
[編集] 要件
UnformattedInputFunction は、以下の操作を実行するストリーム入力関数です。
1)
noskipws 引数を true に設定して、自動記憶域期間を持つ basic_istream::sentry 型のオブジェクトを構築します。これは以下の操作を実行します。- 入力ストリームで eofbit または badbit が設定されている場合、failbit も設定します。また、この入力ストリームの 例外マスク で
failbitに対する例外が有効になっている場合((exceptions() & failbit) != 0)、ios_base::failure をスローします。 - 適用される場合、tie() されている出力ストリームをフラッシュします。
2)
sentry::operator bool() を呼び出して sentry の状態を確認します。これは basic_ios::good と同等です。- 演算子が false を返す場合、または sentry オブジェクトの構築が失敗した場合
- 入力ストリームで抽出された文字数(gcount)をゼロに設定します。
- 関数が
CharTの配列への書き込みのために呼び出された場合、配列の最初の位置にCharT()(ヌル文字)を書き込みます。
- 演算子が true を返す場合、rdbuf()->sbumpc() または rdbuf()->sgetc() を呼び出すかのように入力を実行します。
- ストリームの終端に達した場合(rdbuf()->sbumpc() または rdbuf()->sgetc() の呼び出しが Traits::eof() を返す場合)、
eofbitを設定します。このストリームの 例外マスク でeofbitに対する例外が有効になっている場合((exceptions() & eofbit) != 0)、ios_base::failure をスローします。 - 入力中に例外がスローされた場合、入力ストリームに
badbitを設定します。このストリームの 例外マスク でbadbitに対する例外が有効になっている場合((exceptions() & badbit) != 0)、例外も再スローされます。
- basic_ios::clear からスローされた例外はキャッチまたは再スローされません。
- 入力中に例外がスローされなかった場合、入力ストリームで抽出された文字数(gcount)を設定します。
- ストリームの終端に達した場合(rdbuf()->sbumpc() または rdbuf()->sgetc() の呼び出しが Traits::eof() を返す場合)、
3) 例外による終了か戻りかに関わらず、この関数を離れる前に、常に sentry のデストラクタが呼び出されます。
[編集] 標準ライブラリ
以下の標準ライブラリ関数は、**UnformattedInputFunction** です。
- std::getline(gcount を変更しない点を除く)。
- basic_istream::operator>>(basic_streambuf*)
- basic_istream::get
- basic_istream::getline
- basic_istream::ignore
- basic_istream::peek
- basic_istream::read
- basic_istream::readsome
- basic_istream::putback(最初に
eofbitをクリアする点を除く)。 - basic_istream::unget(最初に
eofbitをクリアする点を除く)。 - basic_istream::sync(gcount を変更しない点を除く)。
- basic_istream::tellg(gcount を変更しない点を除く)。
- basic_istream::seekg(最初に
eofbitをクリアし、gcount を変更しない点を除く)。 - std::ws(gcount を変更しない点を除く)。
[編集] 不具合報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 61 | C++98 | eofbit および/または failbit の設定によって例外がスローされる場合に、badbit が設定されるかどうかは不明確でした。eofbit および/または failbit の設定によって例外がスローされる場合に、badbit が設定されるかどうか |
basic_ios::clear からスローされた例外 はキャッチまたは再スローされません。 |
| LWG 160 | C++98 | キャッチされた例外が 再スローされるかどうかを決定するプロセスで、存在しない関数 `exception()` に言及していましたが、 |
exceptions() に修正されました。 |
| LWG 243 | C++98 | sentry::operator bool() が false を返す場合、または sentry オブジェクトの構築が失敗した場合の動作は規定されていませんでした。 |
指定された |