std::vprint_unicode, std::vprint_unicode_buffered
From cppreference.com
| ヘッダ <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) 次の操作を順番に実行します。
- stream をロックします。
- fmt で指定された仕様に従ってフォーマットされた、args によって提供される引数の文字列表現を out とします。
- out を stream に書き込みます。
- もし stream が、ネイティブ Unicode API 経由でのみ Unicode を表示できる端末を参照している場合、stream をフラッシュし、ネイティブ Unicode API を使用して out を端末に書き込みます。
- それ以外の場合、変更されていない out を stream に書き込みます。
関数終了時に無条件に stream のロックを解除します。
以下のいずれかの条件が満たされている場合、動作は未定義です。
- stream が有効な出力 C ストリームへのポインタではありません。
- ネイティブ Unicode API が使用される場合、out に無効な Unicode コードユニット が含まれています。
2) std::string out = std::vformat(fmt, args);
std::vprint_unicode(stream, "{}", std::make_format_args(out)); と同等です。
std::vprint_unicode(stream, "{}", std::make_format_args(out)); と同等です。
3) std::vprint_unicode_buffered(stdout, fmt, args) と同等です。
|
出力ストリームに文字を書き込んだ後、観測可能なチェックポイントを確立します。 |
(C++26以降) |
目次 |
[編集] パラメータ
| stream | - | 書き込む出力ファイルストリーム | ||||||||||||||||||||||||||||||||||||||||||||||
| fmt | - |
各置換フィールドは以下の形式を持つ。
1) フォーマット指定なしの置換フィールド
2) フォーマット指定ありの置換フィールド
| ||||||||||||||||||||||||||||||||||||||||||||||
| args | - | フォーマットする引数 | ||||||||||||||||||||||||||||||||||||||||||||||
[編集] 例外
- アロケーションに失敗した場合、std::bad_alloc。
- ストリームへの書き込みに失敗した場合、std::system_error。
- 使用されたフォーマッタによって投げられた例外(例:std::format_error)を伝播する。
[編集] 注釈
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またはファイルストリームに出力する (関数) | |
| (C++23) |
型消去された引数表現を使用して、Unicode対応の出力を行う (function) |
| (C++23) |
引数の書式化された表現を用いて、stdoutまたはファイルストリームに出力する (関数テンプレート) |
| (C++20) |
引数のフォーマット済み表現を新しい文字列に格納する (関数テンプレート) |
[編集] 外部リンク
| 1. | Unicode |
| 2. | The Unicode Standard Version 14.0 - Core Specification |