C++ 名前付き要件: UnformattedOutputFunction
From cppreference.com
[編集] 要件
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 です。
- basic_ostream::operator<<(basic_streambuf*)
- basic_ostream::put
- basic_ostream::write
- basic_ostream::flush
|
(C++11以降) |
[編集] 不具合報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 63 | C++98 | 例外処理ポリシーが欠落していました | 追加された |
| LWG 160 | C++98 | キャッチされた例外が 再スローされるかどうかを決定するプロセスで、存在しない関数 `exception()` に言及していましたが、 |
exceptions() に修正されました。 |
| LWG 165 | C++98 | 呼び出しが許可される仮想メンバは rdbuf() の overflow() のみでした |
も許可xsputn() および sync() |