Namespaces
Variants

C++ named requirements: UnformattedInputFunction

From cppreference.net
C++ named requirements

要件

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)を設定します。
3) いずれの場合も、例外による終了または戻り値による終了を問わず、セントリーのデストラクタはこの関数を抜ける前に呼び出されます。

標準ライブラリ

以下の標準ライブラリ関数は UnformattedInputFunction s です。

不具合報告

以下の動作変更の欠陥報告書は、以前に公開された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 オブジェクトの構築に失敗した場合の動作が規定されていなかった
規定された