std::vprint_unicode(std::ostream)
来自 cppreference.cn
< cpp | io | basic ostream
定义于头文件 <ostream> |
||
void vprint_unicode( std::ostream& os, std::string_view fmt, std::format_args args ); |
(自 C++23 起) | |
根据格式字符串 fmt 格式化 args,并将结果写入输出流 os。 行为如同 FormattedOutputFunction of os,但错误报告的某些细节有所不同。
按顺序执行以下操作
- 首先,该函数构造并检查 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() 的值,并且不在 os 的错误状态中打开 ios_base::badbit。
- 可能抛出 ios_base::failure,由 os.setstate(ios_base::badbit) 引起,如果插入到 os 失败。
[编辑] 注解
如果调用原生 Unicode API 需要转码,则无效的代码单元将替换为 U+FFFD
替换字符(请参阅“Unicode 标准 - 核心规范”,第 3.9 章)。
特性测试 宏 | 值 | 标准 | 特性 |
---|---|---|---|
__cpp_lib_print |
202207L |
(C++23) | 格式化输出 |
__cpp_lib_format |
202207L |
(C++23) | 公开 std::basic_format_string |
[编辑] 示例
本节尚不完整 原因:没有示例 |
[编辑] 缺陷报告
以下行为更改缺陷报告被追溯应用于先前发布的 C++ 标准。
DR | 应用于 | 已发布行为 | 正确行为 |
---|---|---|---|
LWG 4044 | C++23 | 如果 os 引用的 终端可以显示 Unicode,则始终使用原生 Unicode API |
仅当终端只能使用 原生 Unicode API 来显示 Unicode 时才使用 |
[编辑] 参见
使用类型擦除的参数表示输出字符数据 (函数) | |
(C++23) |
输出参数的格式化表示 (函数模板) |
插入字符数据或插入到右值流 (函数模板) | |
使用类型擦除的参数表示打印到支持 Unicode 的 stdout 或文件流 (函数) | |
(C++20) |
将参数的格式化表示存储在新字符串中 (函数模板) |
[编辑] 外部链接
1. | Unicode — 维基百科 |
2. | Unicode 标准版本 14.0 — 核心规范 |