名前空間
変種
操作

C++ 名前付き要件: UnformattedOutputFunction

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

[編集] 要件

A UnformattedOutputFunction は、以下の操作を行うストリーム出力関数です。

1) 自動記憶域期間を持つ basic_ostream::sentry 型のオブジェクトを構築します。このオブジェクトは以下の操作を行います。
  • 出力ストリームで eofbit または badbit が設定されている場合、failbit も設定します。そして、この出力ストリームの 例外マスクfailbit に対する例外が有効になっている場合((exceptions() & failbit) != 0)、ios_base::failure をスローします。
  • 該当する場合、tie()'d されている出力ストリームをフラッシュします。
2) sentry::operator bool() を呼び出して sentry の状態をチェックします。これは basic_ios::good と同等です。
  • 演算子 が false を返すか、sentry のコンストラクタが例外をスローした場合、出力は行われません。
  • 演算子 が true を返す場合、rdbuf()->sputc() を呼び出すかのように、目的の出力を実行しようとします。 std::basic_ostream のその他のパブリックメンバも使用される可能性がありますが、rdbuf() の仮想メンバのうち overflow()xsputn()、および sync() 以外が呼び出されることはありません。
  • 出力中に例外がスローされた場合、出力ストリームに badbit を設定します。このストリームの 例外マスクbadbit に対する例外が有効になっている場合((exceptions() & badbit) != 0)、例外も再スローされます。
  • 例外がスローされなかった場合、関数によって指定された値を返します。
3) いずれの場合も、例外による終了または戻りにかかわらず、この関数を離れる前に sentry のデストラクタが呼び出されます。

[編集] 標準ライブラリ

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

(C++11以降)

[編集] 不具合報告

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

DR 適用対象 公開された動作 正しい動作
LWG 63 C++98 例外処理ポリシーが欠落していました 追加された
LWG 160 C++98 キャッチされた例外が
再スローされるかどうかを決定するプロセスで、存在しない関数 `exception()` に言及していましたが、
exceptions() に修正されました。
LWG 165 C++98 呼び出しが許可される仮想メンバは
rdbuf()overflow() のみでした
も許可
xsputn() および sync()
English 日本語 中文(简体) 中文(繁體)