C++ 命名要求: 格式化程序 (自 C++20 起)
来自 cppreference.com
格式化程序 是一个类型,它为给定的格式化参数类型和字符类型抽象了格式化操作。标准库提供的 std::formatter 的特化需要满足 格式化程序 的要求,除非另有说明。
一个 格式化程序 能够格式化常量和非常量参数,通常通过提供一个接受常量引用的 format
成员函数。
[编辑] 要求
如果一个类型满足 基本格式化程序,并且在给定以下类型和值的情况下,下表中所示的表达式有效,并且具有指示的语义,那么该类型满足 格式化程序。
类型 | 定义 |
CharT
|
一个字符类型 |
Arg
|
一个格式化参数类型 |
格式化程序
|
一个用于类型 Arg 和 CharT 的 格式化程序 类型 |
OutputIt
|
一个 传统输出迭代器 类型 |
ParseCtx
|
std::basic_format_parse_context<CharT> |
FmtCtx
|
std::basic_format_context<OutputIt, CharT> |
值 | 定义 |
f | 一个类型为(可能被限定为常量)Formatter 的值 |
arg | 一个类型为 Arg 的左值 |
t | 一个可以转换为(可能被限定为常量)Arg 类型的值 |
parse_ctx | 一个类型为 ParseCtx 且满足以下所有条件的左值
|
fmt_ctx | 一个类型为 FmtCtx 的左值 |
表达式 | 返回类型 | 语义 |
---|---|---|
f.format(t, fmt_ctx) | FmtCtx::iterator |
|
f.format(arg, fmt_ctx) | FmtCtx::iterator
|
与上面相同,但不会修改 arg。 |
[编辑] 缺陷报告
以下行为改变的缺陷报告被追溯应用到先前发布的 C++ 标准。
DR | 应用于 | 已发布的行为 | 正确行为 |
---|---|---|---|
LWG 3892 | C++20 | 如果 格式说明符 不存在,则 pc.begin() 的值不清楚 | 已明确 |