名前空間
変種
操作

C++ 名前付き要件: FormattedInputFunction

From cppreference.com
 
 
C++ 名前付き要件
 

[編集] 要件

A FormattedInputFunction は、以下の操作を実行するストリーム入力関数です。

  • 自動記憶域期間を持つ `noskipws` 引数を false に設定した `basic_istream::sentry` 型のオブジェクトを構築し、以下の操作を実行します。
  • 入力ストリームで eofbit または badbit が設定されている場合、`failbit` も設定します。この入力ストリームの 例外マスク で `failbit` に対する例外が有効になっている場合((exceptions() & failbit) != 0)、ios_base::failure をスローします。
  • 該当する場合、tie() された出力ストリームをフラッシュします。
  • この入力ストリームで `ios_base::skipws` フラグが設定されている場合、以下のいずれかが真になるまで、入力ストリームから文字を抽出し破棄します。
  • 入力ストリームの次の利用可能な文字が空白文字でない。これは、この入力ストリームに現在注入されているロケールの std::ctype ファセットによってテストされます。空白でない文字は抽出されません。
  • ストリームの終端に到達した場合。この場合、`failbit` および `eofbit` が設定されます。これらのビットのいずれかに対してストリームで例外が有効になっている場合(ios_base::failure がスローされます。
  • `sentry::operator bool()` を呼び出して sentry の状態をチェックします。これは basic_ios::good と同等です。
  • sentry が false を返したか、または sentry のコンストラクタが例外をスローした場合、入力は行われません。
  • sentry が true を返した場合、rdbuf()->sbumpc() または rdbuf()->sgetc() を呼び出すかのように、入力を実行します。
  • ストリームの終端に到達した場合(rdbuf()->sbumpc() または rdbuf()->sgetc() の呼び出しが Traits::eof() を返す)、`eofbit` が設定されます。このストリームの 例外マスク で `eofbit` に対する例外が有効になっている場合((exceptions() & eofbit) != 0)、ios_base::failure がスローされます。
  • 入力中に例外がスローされた場合、入力ストリームで `badbit` が設定されます。このストリームの 例外マスク で `badbit` に対する例外が有効になっている場合((exceptions() & badbit) != 0)、その例外も再スローされます。
  • 例外がスローされなかった場合、*this を返します。
  • いずれの場合も、例外による終了か返しかかわらず、この関数を離れる前に sentry のデストラクタが呼び出されます。

[編集] 標準ライブラリ

以下の標準ライブラリ関数は、FormattedInputFunction です。

[編集] 不具合報告

以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。

DR 適用対象 公開された動作 正しい動作
LWG 160 C++98 キャッチされた例外が
再スローされるかどうかを決定するプロセスで、存在しない関数 `exception()` に言及していましたが、
exceptions() に修正されました。
English 日本語 中文(简体) 中文(繁體)