C++ named requirements: FormattedOutputFunction
目次 |
要件
FormattedOutputFunction は、 std::basic_ostream のメンバ関数、または std::basic_ostream を含む非メンバ関数であり、以下の操作を実行します:
- sentry 型のオブジェクトを構築する std::basic_ostream::sentry 。
- bool ( sentry ) が true の場合、 rdbuf ( ) - > sputc ( ) を呼び出すかのように文字を出力ストリームに挿入することで、所望の出力を実行しようと試みる。 std::basic_ostream の他の公開メンバも使用される可能性があるが、 rdbuf ( ) の仮想メンバのうち、 overflow() 、 xsputn() 、 sync() を除くものは決して呼び出されない。
- sentry を破棄し、 * this を返す。
sentry の構築に失敗した場合、または bool ( sentry ) が false の場合、出力は行われません。
出力を生成できなかった場合、 setstate ( std:: ios_base :: failbit ) を呼び出し、これは例外をスローする可能性があります。
出力中に例外がスローされた場合、
std::
ios_base
::
badbit
が
*
this
のエラー状態に設定されますが、
std::ios_base::failure
のスローは引き起こしません。このストリームの
例外マスク
で
badbit
に対する例外が有効になっている場合(すなわち、
(
exceptions
(
)
&
badbit
)
!
=
0
の場合)、例外は再スローされます。
書式化出力関数から例外が送出された場合、 sentry も関数を抜ける前に破棄されます。
パディング
|
書式化出力関数は、パディングを std::num_put::do_put() のステージ3に従って決定します。 |
(C++14まで) |
|
ストリームの書式化出力関数がパディングを決定する場合、以下のように行います。
( os. flags ( ) & std:: ios_base :: adjustfield ) == std:: ios_base :: left が true の場合、フィル文字は文字シーケンスの後に配置されます。それ以外の場合は、文字シーケンスの前に配置されます。 |
(C++14以降) |
標準ライブラリ
以下の標準ライブラリ関数は FormattedOutputFunction s です。
- basic_ostream::operator<< (std::basic_ostream&, int / long / double / void* / bool)
- operator<< (std::basic_ostream&, char)
- operator<< (std::basic_ostream&, char*)
- operator<< (std::basic_ostream&, const std::bitset&)
- operator<< (std::basic_ostream&, const std::basic_string&)
-
operator<<、 std::put_money の戻り値に対して呼び出された場合
| (C++17以降) |
|
(C++23以降) |
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 160 | C++98 |
キャッチされた例外が再スローされるかどうかを
決定するプロセスで存在しない関数
exception()
が言及されていた
|
exceptions() に修正 |
| LWG 165 | C++98 |
rdbuf
(
)
に対して呼び出しが許可されていた
唯一の仮想メンバ関数は
overflow()
のみ
|
xsputn()
と
sync()
も許可 |