C++ named requirements: UnformattedOutputFunction
From cppreference.net
C++
C++ named requirements
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
要件
UnformattedOutputFunction は、以下の処理を実行するストリーム出力関数です:
1)
自動ストレージ期間を持つ
basic_ostream::sentry
型のオブジェクトを構築し、以下の処理を実行する:
-
出力ストリームで
eofbit
または
badbit
が設定されている場合、
failbit
も設定する。さらに、この出力ストリームの
例外マスク
(
(
exceptions
(
)
&
failbit
)
!
=
0
) で
failbitに対する例外が有効になっている場合、 ios_base::failure をスローする。 - 該当する場合、tie()された出力ストリームをフラッシュする。
2)
セントリの状態を
sentry::operator bool()
を呼び出してチェックします。これは
basic_ios::good
と同等です。
- 演算子が false を返すか、セントリのコンストラクタが例外をスローした場合、出力は行われません。
- 演算子が true を返した場合、 rdbuf ( ) - > sputc ( ) を呼び出すかのように、文字を出力ストリームに挿入して所望の出力を実行しようと試みます。 std::basic_ostream の他の公開メンバも使用できますが、 rdbuf ( ) の仮想メンバのうち、 overflow() 、 xsputn() 、 sync() を除くものは決して呼び出されません。
-
-
出力中に例外がスローされた場合、出力ストリームの
badbitを設定します。このストリームの 例外マスク でbadbitに対する例外が有効になっている場合( ( exceptions ( ) & badbit ) ! = 0 )、例外は再スローされます。 - 例外がスローされなかった場合、関数で指定された値を返します。
-
出力中に例外がスローされた場合、出力ストリームの
3)
いずれの場合も、例外による終了または戻り値による終了を問わず、セントリーのデストラクタはこの関数を抜ける前に呼び出されます。
標準ライブラリ
以下の標準ライブラリ関数は UnformattedOutputFunction s です。
- 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()
も許可 |