std:: vprint_unicode (std::ostream)
|
定义于头文件
<ostream>
|
||
|
void
vprint_unicode
(
std::
ostream
&
os,
std:: string_view fmt, std:: format_args args ) ; |
(C++23 起) | |
按照格式字符串 fmt 格式化 args ,并将结果写入输出流 os 。其行为类似于 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 写入字符后,建立一个 可观测检查点 。 |
(since C++26) |
当使用原生 Unicode API 时,若 out 包含无效的 Unicode 码元 ,其行为是未定义的。
目录 |
参数
| os | - | 用于插入数据的输出流 | ||||||||||||||||||||||||||||||||||||||||||||||
| fmt | - |
每个替换字段具有以下格式:
1)
不带格式说明的替换字段
2)
带格式说明的替换字段
|
||||||||||||||||||||||||||||||||||||||||||||||
| args | - | 要格式化的参数 | ||||||||||||||||||||||||||||||||||||||||||||||
异常
- 分配失败时抛出 std::bad_alloc 。
- 传播任何由 formatter 抛出的异常(例如 std::format_error ),不考虑 os. exceptions ( ) 的值,且不会在 os 的错误状态中设置 ios_base::badbit 。
- 可能抛出由 os. setstate ( ios_base :: badbit ) 引发的 ios_base::failure ,该调用在向 os 插入数据失败时执行。
注释
若调用原生Unicode API需要进行转码,无效码元将被替换为
U+FFFD
替换字符(参见《The Unicode Standard - Core Specification》
第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)
|
使用
类型擦除
参数表示输出字符数据
(函数) |
|
(C++23)
|
输出参数的
格式化
表示
(函数模板) |
|
插入字符数据或插入到右值流
(函数模板) |
|
|
使用
类型擦除
参数表示向支持Unicode的
stdout
或文件流打印
(函数) |
|
|
(C++20)
|
将参数的格式化表示存储到新字符串中
(函数模板) |
外部链接
| 1. | Unicode — 维基百科 |
| 2. | Unicode标准版本14.0 — 核心规范 |