名前空間
変種
操作

std::vprint_unicode, std::vprint_unicode_buffered

From cppreference.com
< cpp‎ | io
 
 
 
出力関数
出力関数
(C++23)
(C++23)
vprint_unicodevprint_unicode_buffered
(C++23)(C++23)
 
ヘッダ <print> で定義
void vprint_unicode( std::FILE* stream,
                     std::string_view fmt, std::format_args args );
(1) (C++23から)
void vprint_unicode_buffered( std::FILE* stream,
                              std::string_view fmt, std::format_args args );
(2) (C++23から)
void vprint_unicode_buffered( std::string_view fmt, std::format_args args );
(3) (C++23から)

args をフォーマット文字列 fmt に従ってフォーマットし、その結果を出力ストリームに書き込みます。

1) 次の操作を順番に実行します。
  1. stream をロックします。
  2. fmt で指定された仕様に従ってフォーマットされた、args によって提供される引数の文字列表現を out とします。
  3. outstream に書き込みます。
  • もし stream が、ネイティブ Unicode API 経由でのみ Unicode を表示できる端末を参照している場合、stream をフラッシュし、ネイティブ Unicode API を使用して out を端末に書き込みます。
  • それ以外の場合、変更されていない outstream に書き込みます。
関数終了時に無条件に stream のロックを解除します。
以下のいずれかの条件が満たされている場合、動作は未定義です。
  • stream が有効な出力 C ストリームへのポインタではありません。
  • ネイティブ Unicode API が使用される場合、out に無効な Unicode コードユニット が含まれています。
2) std::string out = std::vformat(fmt, args);
std::vprint_unicode(stream, "{}", std::make_format_args(out));
と同等です。
3) std::vprint_unicode_buffered(stdout, fmt, args) と同等です。


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

(C++26以降)

目次

[編集] パラメータ

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

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

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

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

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

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

[編集] 例外

[編集] 注釈

out に無効な Unicode コードユニットが含まれている場合、C++ 標準では、実装が診断メッセージを生成することが推奨されています。

POSIX では、端末への書き込みは通常の標準 I/O 関数を使用して行われるため、端末を他のファイルストリームと区別して扱う必要はありません。

Windows では、GetConsoleMode(_get_osfhandle(_fileno(stream))) が非ゼロを返した場合(Windows のドキュメントを参照:GetConsoleMode_get_osfhandle、および _fileno)、ストリームは端末を参照しているとみなされます。Windows におけるネイティブ Unicode API は WriteConsoleW です。

ネイティブ Unicode API の呼び出しで文字コード変換が必要な場合、無効なコードユニットは `U+FFFD` REPLACEMENT CHARACTER に置き換えられます(「The Unicode Standard - Core Specification」の 第 3.9 章を参照)。

機能テストマクロ 規格 機能
__cpp_lib_print 202207L (C++23) 書式付き出力
202403L (C++26)
(DR23)
バッファなしのフォーマット済み出力
202406L (C++26)
(DR23)
より多くのフォーマット可能な型でバッファなしのフォーマット済み出力を有効にする
__cpp_lib_format 202207L (C++23) std::basic_format_string の公開

[編集]

[編集] 不具合報告

以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。

DR 適用対象 公開された動作 正しい動作
LWG 4044 C++23 Unicode を表示できる端末を参照している場合、ネイティブ Unicode API は常に使用されていました。
stream で参照される端末が Unicode を表示できる場合
端末が Unicode を表示できる場合にのみ使用される
ネイティブ Unicode API を使用して Unicode を表示できる
P3107R5 C++23 印刷操作は常にバッファリングされていました。 バッファリングされない印刷操作を提供します。
P3235R3 C++23 追加された関数の名前
P3107R5 によって誤解を招くものだった
関数名を変更した

[編集] 関連項目

引数の型消去された表現を用いて、stdoutまたはファイルストリームに出力する
(関数) [編集]
型消去された引数表現を使用して、Unicode対応の出力を行う
(function) [編集]
(C++23)
引数の書式化された表現を用いて、stdoutまたはファイルストリームに出力する
(関数テンプレート) [編集]
(C++20)
引数のフォーマット済み表現を新しい文字列に格納する
(関数テンプレート) [編集]

[編集] 外部リンク

1.  Unicode
2.  The Unicode Standard Version 14.0 - Core Specification
English 日本語 中文(简体) 中文(繁體)