C++
编译器支持
独立式和宿主式
语言
标准库
标准库头文件
具名要求
特性测试宏 (C++20)
语言支持库
概念库 (C++20)
诊断库
内存管理库
元编程库 (C++11)
通用工具库
容器库
迭代器库
范围库 (C++20)
算法库
字符串库
文本处理库
数值库
日期和时间库
输入/输出库
文件系统库 (C++17)
并发支持库 (C++11)
执行控制库 (C++26)
技术规范
符号索引
外部库
[编辑] 文本处理库
本地化库
正则表达式库 (C++11)
Formatting library (C++20)
空终止序列工具
字节字符串
多字节字符串
宽字符串
原始数值转换
to_chars(C++17)
to_chars_result(C++17)
from_chars(C++17)
from_chars_result(C++17)
chars_format(C++17)
文本编码标识
text_encoding(C++26)
[编辑] Formatting library
标准格式规范
格式化函数
format(C++20)
format_to(C++20)
format_to_n(C++20)
formatted_size(C++20)
vformat(C++20)
vformat_to(C++20)
格式字符串
basic_format_stringformat_stringwformat_string(C++20)(C++20)(C++20)
runtime_format(C++26)
格式化概念
formattable(C++23)
Formatter
formatter(C++20)
formatter
formatter
range_formatter(C++23)
enable_nonlocking_formatter_optimization(C++23)
basic_format_parse_contextformat_parse_contextwformat_parse_context(C++20)(C++20)(C++20)
basic_format_contextformat_contextwformat_context(C++20)(C++20)(C++20)
range_format(C++23)
format_kind(C++23)
格式化参数
basic_format_arg(C++20)
basic_format_arg::handle(C++20)
basic_format_argsformat_argswformat_args(C++20)(C++20)(C++20)
visit_format_arg(C++20) (deprecated in C++26)
make_format_argsmake_wformat_args(C++20)(C++20)
格式错误
format_error(C++20)
[编辑]
文本格式化库提供了一种安全且可扩展的替代方案,以替代 printf 系列函数。它旨在补充现有的 C++ I/O 流库。
目录
1 格式规范
2 格式化函数
3 格式字符串
4 格式化概念
5 可扩展性支持和实现细节
6 辅助项 (since C++23)
7 注解
8 示例
9 缺陷报告
10 参见
[编辑] 格式规范
格式规范指定了如何使用不同类型的选项来格式化对象。
基本类型和标准字符串类型的对象格式化使用基本格式规范。其他库组件也可能提供它们自己的格式规范,详情请参见此处。
[编辑] 格式化函数
定义于头文件
format(C++20)
将参数的格式化表示形式存储在新字符串中 (函数模板) [编辑]
format_to(C++20)
通过输出迭代器写出其参数的格式化表示形式 (函数模板) [编辑]
format_to_n(C++20)
通过输出迭代器写出其参数的格式化表示形式,不超过指定大小 (函数模板) [编辑]
formatted_size(C++20)
确定存储其参数的格式化表示形式所需的字符数 (函数模板) [编辑]
[编辑] 格式字符串
定义于头文件
basic_format_stringformat_stringwformat_string(C++20)(C++20)(C++20)
在构造时执行编译时格式字符串检查的类模板 (类模板) [编辑]
runtime_format(C++26)
创建可直接在面向用户的格式化函数中使用的运行时格式字符串 (函数) [编辑]
[编辑] 格式化概念
定义于头文件
formattable(C++23)
指定类型是可格式化的,即它特化了 std::formatter 并提供成员函数 parse 和 format (概念) [编辑]
[编辑] 可扩展性支持和实现细节
定义于头文件
vformat(C++20)
使用类型擦除参数表示的 std::format 的非模板变体 (函数) [编辑]
vformat_to(C++20)
使用类型擦除参数表示的 std::format_to 的非模板变体 (函数模板) [编辑]
make_format_argsmake_wformat_args(C++20)(C++20)
创建一个类型擦除对象,引用所有格式化参数,可转换为 format_args (函数模板) [编辑]
visit_format_arg(C++20) (deprecated in C++26)
用户定义格式化器的参数访问接口 (函数模板) [编辑]
formatter(C++20)
为给定类型定义格式化规则 (类模板) [编辑]
range_formatter(C++23)
类模板,帮助为范围类型实现 std::formatter 特化 (类模板) [编辑]
enable_nonlocking_formatter_optimization(C++23)
指示参数类型可以高效打印(变量模板)[编辑]
range_format(C++23)
指定应如何格式化范围 (枚举) [编辑]
format_kind(C++23)
为范围选择合适的 std::range_format(变量模板)[编辑]
basic_format_arg(C++20)
类模板,为用户定义的格式化器提供对格式化参数的访问 (类模板) [编辑]
basic_format_argsformat_argswformat_args(C++20)(C++20)(C++20)
提供对所有格式化参数的访问的类 (类模板) [编辑]
basic_format_contextformat_contextwformat_context(C++20)(C++20)(C++20)
格式化状态,包括所有格式化参数和输出迭代器 (类模板) [编辑]
basic_format_parse_contextformat_parse_contextwformat_parse_context(C++20)(C++20)(C++20)
格式化字符串解析器状态 (类模板) [编辑]
format_error(C++20)
在格式化错误时抛出的异常类型 (类) [编辑]
[编辑] 辅助项 (since C++23)
template< class R, class CharT > concept /*const-formattable-range*/ = ranges::input_range
std::formattable
(1)
(仅为演示*)
template< class R, class CharT > using /*fmt-maybe-const*/ =
std::conditional_t*const-formattable-range*/
(2)
(仅为演示*)
[编辑] 注解
特性测试 宏
值
Std
特性
__cpp_lib_format
201907L
(C++20)
文本格式化
202106L
(C++23)(DR20)
编译时格式字符串检查;减少 std::vformat_to 的参数化
202110L
(C++23)(DR20)
修复 chrono 格式化器中的区域设置处理;支持非 const-formattable 类型
202207L
(C++23)(DR20)
公开 std::basic_format_string;阐明 chrono 类型的本地化格式化中的编码处理
202304L
(C++26)
格式化指针
202305L
(C++26)
类型检查格式参数
202306L
(C++26)
成员 std::basic_format_arg::visit
202311L
(C++26)
运行时格式字符串
202403L
(C++26)
使用 std::println 打印空白行
202403L
(C++26)(DR23)
允许 std::print 的高效实现本节尚不完整原因:值应 >= 202406L,即与前一个值不同
__cpp_lib_format_ranges
202207L
(C++23)
格式化范围
__cpp_lib_format_path
202403L
(C++26)
格式化 std::filesystem::path
__cpp_lib_format_uchar
202311L
(C++26)
修复代码单元作为整数的格式化
__cpp_lib_formatters
202302L
(C++23)
格式化 std::thread::id 和 std::stacktrace
我们有意将添加 std::basic_format_string (P2508) 视为缺陷报告,因为所有已知的实现都在 C++20 模式下提供这些组件,尽管官方并未如此分类。
[编辑] 示例
运行此代码
#include
#include
int main()
{
std::string message = std::format("The answer is {}.", 42);
assert(message == "The answer is 42.");
}
[编辑] 缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的 C++ 标准。
DR
应用于
已发布行为
正确行为
P2418R2
C++20
既非 const-formattable 也非 copyable 的对象(例如类似生成器的对象)不可格式化
允许格式化这些对象(放宽的格式化器要求)
P2508R1
C++20
此设施没有用户可见的名称
名称 basic_format_string 被公开
[编辑] 参见
print(C++23)
使用参数的格式化表示形式打印到 stdout 或文件流 (函数模板) [编辑]
println(C++23)
与 std::print 相同,但每次打印都以额外的换行符结尾 (函数模板) [编辑]
print(std::ostream)(C++23)
输出参数的格式化表示形式 (函数模板) [编辑]