C++ named requirements: UnformattedInputFunction
From cppreference.net
要件
UnformattedInputFunction は、以下の処理を実行するストリーム入力関数です:
1)
自動ストレージ期間を持つ
basic_istream::sentry
型のオブジェクトを構築し、
noskipws
引数を
true
に設定する。これにより以下の処理が実行される:
-
入力ストリームで
eofbit
または
badbit
が設定されている場合、
failbit
も設定する。さらに、この入力ストリームの
例外マスク
で
failbitに対する例外が有効になっている場合 ( ( exceptions ( ) & failbit ) ! = 0 )、 ios_base::failure をスローする。 - 該当する場合、tie()された出力ストリームをフラッシュする。
2)
sentry::operator bool()
を呼び出してセントリーの状態をチェックします。これは
basic_ios::good
と同等です。
- 演算子が false を返すか、セントリーのコンストラクタが例外をスローした場合:
-
- 入力ストリームの抽出文字数(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)
いずれの場合も、例外による終了または戻り値による終了を問わず、セントリーのデストラクタはこの関数を抜ける前に呼び出されます。
標準ライブラリ
以下の標準ライブラリ関数は UnformattedInputFunction s です。
- 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
の設定をもたらすかどうかが不明確であった
|
basic_ios::clear
からの例外は捕捉または再送出されない |
| LWG 160 | C++98 |
捕捉された例外が再送出されるかどうかの判定プロセスにおいて
存在しない関数
exception()
が言及されていた
|
exceptions() に修正 |
| LWG 243 | C++98 |
sentry::operator bool()
が
false
を返す場合、
または sentry オブジェクトの構築に失敗した場合の動作が規定されていなかった |
規定された |