命名空间
变体
操作

C++ 命名要求: Formatter (C++20 起)

来自 cppreference.cn
 
 
C++ 命名要求
基本
类型属性
全库范围
(C++11)




Container(容器)
容器元素
迭代器 (Iterator)
流 I/O
格式化器
格式化器(Formatter)
(C++20)
随机数
并发
范围(Ranges)
多维视图
其他

 

Formatter 是一种抽象了给定格式化参数类型和字符类型的格式化操作的类型。标准库提供的 std::formatter 特化必须满足 Formatter 的要求,除非另有说明。

Formatter 能够格式化 const 和非 const 参数,通常通过提供一个接受 const 引用的 format 成员函数。

[编辑] 要求

如果一个类型满足 BasicFormatter 并且给定以下类型和值,则下表中所示的表达式是有效的并具有指示的语义,则该类型满足 Formatter

类型 定义
CharT 字符类型
Arg 格式化参数类型
格式化器(Formatter) 用于类型 ArgCharTFormatter 类型
OutputIt 旧版输出迭代器 类型
ParseCtx std::basic_format_parse_context<CharT>
FmtCtx std::basic_format_context<OutputIt, CharT>
定义
f 类型为(可能带有 const 限定符)Formatter 的值
arg 类型为 Arg 的左值
t 可转换为(可能带有 const 限定符)Arg 的类型的值
parse_ctx 类型为 ParseCtx 的左值,满足以下所有条件
  • parse_ctx.begin() 指向 格式字符串 中正在格式化的替换字段的 format-spec 的开头。
  • 如果 format-spec 不存在或为空,则 parse_ctx.begin() == parse_ctx.end()*parse_ctx.begin() == '}'
fmt_ctx 类型为 FmtCtx 的左值
表达式 返回类型 语义
f.format(t, fmt_ctx) FmtCtx::iterator 
  • 根据存储在 f 中的说明符格式化 t,将输出写入 fmt_ctx.out(),并返回输出范围的结束迭代器。
  • 输出只能依赖于
    • t,
    • fmt_ctx.locale(),
    • 上次调用 f.parse(parse_ctx) 得到的范围 [parse_ctx.begin()parse_ctx.end()),以及
    • fmt_ctx.arg(n) 对于任何类型为 std::size_t 的值 n
f.format(arg, fmt_ctx) FmtCtx::iterator 如上所述,但不修改 arg

[编辑] 缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告 应用于 发布时的行为 正确的行为
LWG 3892 C++20 如果 format-spec 不存在,则 pc.begin() 的值不明确 已明确