Namespaces
Variants

C++ named requirements: FormattedOutputFunction

From cppreference.net
C++ named requirements

目次

要件

FormattedOutputFunction は、 std::basic_ostream のメンバ関数、または std::basic_ostream を含む非メンバ関数であり、以下の操作を実行します:

  1. sentry 型のオブジェクトを構築する std::basic_ostream::sentry
  2. bool ( sentry ) true の場合、 rdbuf ( ) - > sputc ( ) を呼び出すかのように文字を出力ストリームに挿入することで、所望の出力を実行しようと試みる。 std::basic_ostream の他の公開メンバも使用される可能性があるが、 rdbuf ( ) の仮想メンバのうち、 overflow() xsputn() sync() を除くものは決して呼び出されない。
  3. 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まで)

ストリームの書式化出力関数がパディングを決定する場合、以下のように行います。

CharT 文字シーケンス seq が与えられたとき、ここで CharT os 文字コンテナ型 であり、 seq の長さが os. width ( ) より小さい場合、 os. fill ( ) の十分なコピーが、 os. width ( ) 文字の幅にパディングするために必要に応じてこのシーケンスに追加されます。

( os. flags ( ) & std:: ios_base :: adjustfield ) == std:: ios_base :: left true の場合、フィル文字は文字シーケンスの後に配置されます。それ以外の場合は、文字シーケンスの前に配置されます。

(C++14以降)

標準ライブラリ

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

(C++17以降)
(ただし、 os が出力ストリームオブジェクトである場合):
  • std::vformat の呼び出しによってスローされた例外は、 os. exceptions ( ) の値に関係なく伝播され、 os のエラー状態で ios_base::badbit を設定しない;
  • os への挿入が失敗した場合、 os. setstate ( ios_base :: badbit ) を呼び出す(これは ios_base::failure をスローする可能性がある)。
(C++23以降)

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
LWG 160 C++98 キャッチされた例外が再スローされるかどうかを
決定するプロセスで存在しない関数 exception() が言及されていた
exceptions() に修正
LWG 165 C++98 rdbuf ( ) に対して呼び出しが許可されていた
唯一の仮想メンバ関数は overflow() のみ
xsputn() sync()
も許可