std:: vprint_unicode, std:: vprint_unicode_buffered
|
定义于头文件
<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 起) |
按照格式字符串 fmt 格式化 args ,并将结果写入输出流。
- 锁定 stream 。
- 令 out 表示由 args 提供的格式化参数,根据 fmt 中给定的规范进行格式化后的字符表示。
- 将 out 写入 stream :
-
- 若 stream 引用的终端仅能通过 原生 Unicode API 显示 Unicode,则刷新 stream 并使用原生 Unicode API 将 out 写入终端。
- 否则,将未修改的 out 写入 stream 。
- stream 不是指向有效输出 C 流的指针。
- 当使用原生 Unicode API 时, out 包含无效的 Unicode 码元 。
std :: vprint_unicode ( stream, "{}" , std:: make_format_args ( out ) ) ; 。
|
向输出流写入字符后,建立一个 可观测检查点 。 |
(since C++26) |
目录 |
参数
| stream | - | 用于写入的输出文件流 | ||||||||||||||||||||||||||||||||||||||||||||||
| fmt | - |
每个替换字段具有以下格式:
1)
不带格式说明的替换字段
2)
带格式说明的替换字段
|
||||||||||||||||||||||||||||||||||||||||||||||
| args | - | 要格式化的参数 | ||||||||||||||||||||||||||||||||||||||||||||||
异常
- std::bad_alloc 在分配失败时抛出。
- std::system_error ,当写入流失败时抛出。
- 传播由使用的 格式化器 抛出的任何异常,例如 std::format_error 。
注释
C++标准鼓励实现者在 out 包含无效Unicode码位时生成诊断信息。
在POSIX系统上,向终端写入数据是通过常规的标准I/O函数完成的,因此无需将终端与其他文件流区别对待。
在Windows系统中,若
GetConsoleMode
(
_get_osfhandle
(
_fileno
(
stream
)
)
)
返回非零值,则该流指向终端(详见Windows文档中关于
GetConsoleMode
、
_get_osfhandle
和
_fileno
的说明)。Windows平台上的原生Unicode API是
WriteConsoleW
。
若调用原生Unicode API需要进行转码,无效码元将被替换为
U+FFFD
替换字符(参见《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++ 标准。
| 缺陷报告 | 适用标准 | 发布时的行为 | 修正后的行为 |
|---|---|---|---|
| LWG 4044 | C++23 |
若
stream
引用的终端能显示Unicode,
则始终使用原生Unicode API |
仅当终端只能通过原生Unicode API
显示Unicode时才使用 |
| P3107R5 | C++23 | 打印操作始终采用缓冲机制 | 提供无缓冲的打印操作 |
| P3235R3 | C++23 |
由
P3107R5
添加的
函数名称存在误导性 |
修改了函数名称 |
参见
|
使用
类型擦除
参数表示形式输出到
stdout
或文件流
(函数) |
|
|
(C++23)
|
使用
类型擦除
参数表示形式执行 Unicode 感知输出
(函数) |
|
(C++23)
|
使用参数的
格式化
表示形式输出到
stdout
或文件流
(函数模板) |
|
(C++20)
|
将参数的格式化表示形式存储到新字符串中
(函数模板) |
外部链接
| 1. | Unicode |
| 2. | Unicode标准版本14.0 - 核心规范 |