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。其行为类似于 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 |