Namespaces
Variants

std:: vprint_unicode (std::ostream)

From cppreference.net
定義済みヘッダー <ostream>
void vprint_unicode ( std:: ostream & os,
std:: string_view fmt, std:: format_args args ) ;
(C++23以降)

書式文字列 fmt に従って args をフォーマットし、結果を出力ストリーム os に書き込みます。 FormattedOutputFunction として振る舞いますが、エラー報告の一部の詳細が 異なります

以下の操作を順番に実行します:

  1. まず、関数は sentry オブジェクトを構築しチェックします。
  2. 自動変数を以下のように初期化します: std:: string out = std:: vformat ( os. getloc ( ) , fmt, args ) ;
  3. out os に書き込みます:
  • os ネイティブ Unicode API を通じてのみ Unicode を表示可能な端末を参照している場合、 os をフラッシュし、ネイティブ Unicode API を使用して out を端末に書き込みます。
  • それ以外の場合、文字シーケンス [ out. begin ( ) , out. end ( ) ) os に挿入します。

端末への書き込みまたは os への挿入が失敗した場合、 os. setstate ( std:: ios_base :: badbit ) を呼び出します。

os に文字を書き込んだ後、 観測可能なチェックポイント を確立します。

(since C++26)

ネイティブUnicode APIが使用される場合に out が無効なUnicode コードユニット を含んでいる場合、動作は未定義です。

目次

パラメータ

os - データを挿入する出力ストリーム
fmt - フォーマット文字列を表すオブジェクト。フォーマット文字列は以下から構成される:
  • 通常の文字( { } を除く)は変更されずに出力にコピーされる
  • エスケープシーケンス { { } } は、出力ではそれぞれ { } に置き換えられる
  • 置換フィールド

各置換フィールドは以下の形式を持つ:

{ arg-id (optional) } (1)
{ arg-id (optional) : format-spec } (2)
1) フォーマット指定なしの置換フィールド
2) フォーマット指定ありの置換フィールド
arg-id - フォーマットに使用する args 内の引数のインデックスを指定する。省略された場合、引数は順番に使用される。

フォーマット文字列内の arg-id はすべて存在するか、すべて省略されなければならない。手動インデックスと自動インデックスの混合はエラーである。

format-spec - 対応する引数に対する std::formatter 特殊化によって定義されるフォーマット仕様。 } で始まることはできない。

(C++23以降)
(C++26以降)
  • その他のフォーマット可能な型の場合、フォーマット仕様はユーザー定義の formatter 特殊化によって決定される。
args - フォーマットされる引数

例外

  • std::bad_alloc メモリ確保失敗時に送出。
  • 任意の formatter が送出する例外(例: std::format_error )を、 os. exceptions ( ) の値に関わらず伝播し、 os のエラー状態における ios_base::badbit を設定しない。
  • os への挿入が失敗した場合に呼び出される os. setstate ( ios_base :: badbit ) によって引き起こされる ios_base::failure を送出する可能性がある。

注記

ネイティブUnicode APIの呼び出しにトランスコードが必要な場合、無効なコードユニットは U+FFFD REPLACEMENT CHARACTERで置換されます(「The Unicode Standard - Core Specification」、 Chapter 3.9 を参照)。

機能テスト マクロ 規格 機能
__cpp_lib_print 202207L (C++23) フォーマット済み出力
__cpp_lib_format 202207L (C++23) std::basic_format_string の公開

不具合報告

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

DR Applied to Behavior as published Correct behavior
LWG 4044 C++23 端末がUnicodeを表示できる場合、
os が参照する端末では常にネイティブUnicode APIが使用されていた
Unicodeを表示するためにネイティブUnicode APIのみを使用できる端末でのみ使用される

関連項目

型消去された引数表現を使用して文字データを出力する
(関数)
引数の書式化された表現を出力する
(関数テンプレート)
文字データを挿入する、または右辺値ストリームに挿入する
(関数テンプレート)
Unicode対応の stdout またはファイルストリームに型消去された引数表現を使用して出力する
(関数)
(C++20)
引数の書式化された表現を新しい文字列に格納する
(関数テンプレート)

外部リンク

1. Unicode — Wikipedia
2. The Unicode Standard Version 14.0 — Core Specification