std::vprint_unicode, std::vprint_unicode_buffered
来自 cppreference.com
定义于头文件 <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,并将结果写入输出流。
1) 按顺序执行以下操作
- 锁定 stream.
- 令 out 表示根据 fmt 中给定的规范格式化的 args 提供的格式化参数的字符表示。
- 将 out 写入 stream
- 如果 stream 指向能够显示 Unicode 的终端,则刷新 stream 并使用 本机 Unicode API 将 out 写入终端。
- 否则,将未修改的 out 写入 stream.
在函数退出时无条件地解锁 stream.
如果满足以下任一条件,则行为未定义
- stream 不是指向输出 C 流的有效指针。
- 如果使用本机 Unicode API,out 包含无效的 Unicode 代码单元。
2) 等效于 std::string out = std::vformat(fmt, args);
std::vprint_unicode(stream, "{}", std::make_format_args(out));.
std::vprint_unicode(stream, "{}", std::make_format_args(out));.
3) 等效于 std::vprint_unicode_buffered(stdout, fmt, args).
内容 |
[编辑] 参数
stream | - | 要写入的输出文件流 | ||||||||||||||||||||||||||||||||||||||||||||||
fmt | - |
每个替换字段具有以下格式
1) 不带格式说明符的替换字段
2) 带格式说明符的替换字段
| ||||||||||||||||||||||||||||||||||||||||||||||
args | - | 要格式化的参数 |
[编辑] 异常
- 分配失败时为 std::bad_alloc。
- 写入流失败时为 std::system_error。
- 传播由所使用的 格式化程序 引发的任何异常,例如 std::format_error。
[编辑] 说明
C++ 标准鼓励实现者在 out 包含无效 Unicode 代码单元时产生诊断消息。
在 POSIX 上,如果表达式 isatty(fileno(stream)) != 0 为真,则流指向终端(请参阅 POSIX 文档,了解 isatty
和 fileno
)。
在 Windows 上,如果表达式 GetConsoleMode(_get_osfhandle(_fileno(stream))) 返回非零值,则流指的是终端(参见 Windows 文档中的 GetConsoleMode
、_get_osfhandle
和 _fileno
)。Windows 上的原生 Unicode API 是 WriteConsoleW
。
如果调用原生 Unicode API 需要转码,则无效的代码单元将被替换为 U+FFFD
替换字符(参见 "The Unicode Standard Version 14.0 - Core Specification",第 3.9 章)。
功能测试 宏 | 值 | Std | 功能 |
---|---|---|---|
__cpp_lib_print |
202207L | (C++23) | 格式化输出 |
202403L | (C++26) (DR23) |
带流锁定的格式化输出 | |
202406L | (C++26) (DR23) |
为更多可格式化类型启用非锁定格式化程序优化 | |
__cpp_lib_format |
202207L | (C++23) | 公开 std::basic_format_string |
[编辑] 示例
本节内容不完整 原因:没有示例 |
[编辑] 参见
使用 类型擦除 的参数表示形式,输出到 stdout 或文件流 (函数) | |
(C++23) |
使用 类型擦除 的参数表示形式,执行 Unicode 感知输出 (函数) |
(C++23) |
使用参数的 格式化 表示形式,输出到 stdout 或文件流 (函数模板) |
(C++20) |
将参数的格式化表示形式存储在一个新字符串中 (函数模板) |
[编辑] 外部链接
1. | Unicode |
2. | The Unicode Standard Version 14.0 - Core Specification |