std::vprint_unicode(std::ostream)
來自 cppreference.com
< cpp | io | basic_ostream
定義於標頭檔案 <ostream> |
||
void vprint_unicode( std::ostream& os, std::string_view fmt, std::format_args args ); |
(C++23 起) | |
根據格式字串 fmt 格式化 args,並將結果寫入輸出流 os。其行為類似於 os 的 FormattedOutputFunction,但錯誤報告的一些細節有所不同。
按順序執行以下操作
- 首先,函式構造並檢查 守衛 (sentry) 物件。
- 初始化一個自動變數,如同透過 std::string out = std::vformat(os.getloc(), fmt, args);。
- 將 out 寫入 os。
- 如果 os 指的是隻能透過原生 Unicode API 顯示 Unicode 的終端,則重新整理 os 並使用原生 Unicode API 將 out 寫入終端。
- 否則,將字元序列
[
out.begin(),
out.end())
插入到 os 中。
如果寫入終端或插入到 os 失敗,則呼叫 os.setstate(std::ios_base::badbit)。
在將字元寫入 os 後,建立一個可觀察的檢查點。 |
(C++26 起) |
如果使用原生 Unicode API 時 out 包含無效的 Unicode 碼元,則行為未定義。
目錄 |
[編輯] 引數
os | - | 要插入資料的輸出流 | ||||||||||||||||||||||||||||||||||||||||||||||
fmt | - |
每個替換欄位具有以下格式:
1) 沒有格式化規範的替換欄位
2) 帶有格式化規範的替換欄位
| ||||||||||||||||||||||||||||||||||||||||||||||
args | - | 要格式化的引數 |
[編輯] 異常
- 分配失敗時丟擲 std::bad_alloc。
- 傳播由任何 formatter 丟擲的任何異常,例如 std::format_error,而不管 os.exceptions() 的值,並且不將 ios_base::badbit 設定到 os 的錯誤狀態中。
- 如果插入到 os 失敗,可能會丟擲由 os.setstate(ios_base::badbit) 引起的 ios_base::failure。
[編輯] 注意
如果呼叫原生 Unicode API 需要轉碼,則無效碼元將被替換為 U+FFFD
替換字元(參見“Unicode 標準 - 核心規範”,第 3.9 章)。
特性測試宏 | 值 | 標準 | 特性 |
---|---|---|---|
__cpp_lib_print |
202207L |
(C++23) | 格式化輸出 |
__cpp_lib_format |
202207L |
(C++23) | 公開 std::basic_format_string |
[編輯] 示例
本節不完整 原因:無示例 |
[編輯] 缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
LWG 4044 | C++23 | 如果 os 所指的終端 能夠顯示 Unicode,則始終使用原生 Unicode API |
僅當終端只能使用原生 Unicode API 來顯示 Unicode 時才使用 |
[編輯] 參閱
使用型別擦除的引數表示輸出字元資料 (函式) | |
(C++23) |
輸出引數的格式化表示 (函式模板) |
插入字元資料或插入到右值流中 (函式模板) | |
使用型別擦除的引數表示形式向支援 Unicode 的 stdout 或檔案流列印 (函式) | |
(C++20) |
將引數的格式化表示儲存在新字串中 (函式模板) |
[編輯] 外部連結
1. | Unicode — 維基百科 |
2. | The Unicode Standard Version 14.0 — Core Specification |