C++ 具名要求:格式化器 (Formatter) (C++20 起)

来自cppreference.com
< cpp‎ | named req


 
 
C++ 具名要求
 

格式化器 (Formatter) 是对给定的格式化参数类型及字符类型抽象格式化操作的类型。除非另外标注,标准库提供的 std::formatter 特化均满足 格式化器 (Formatter)

格式化器 (Formatter) 能格式化 const 与非 const 的实参,这通常以提供接收 const 引用的 format 成员函数达成。

要求

一个类型满足格式化器 (Formatter) 的条件是,它满足基本格式化器 (BasicFormatter) ,并且给定以下类型和值,下方表格列出的表达式必须合法且具有指定的语义:

类型 定义
CharT 字符类型
Arg 格式化实参类型
Formatter 对于类型 ArgCharT基本格式化器 (BasicFormatter) 类型
OutputIt 老式输出迭代器 (LegacyOutputIterator) 类型
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() 指向格式字符串中格式化的替换域的格式说明 的开始处。
  • 如果格式说明 不存在或者为空,那么满足 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()),以及
    • 对于任何 std::size_t 类型值 nfmt_ctx.arg(n)
f.format(arg, fmt_ctx) FmtCtx::iterator 同上,但不修改 arg

缺陷报告

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

缺陷报告 应用于 出版时的行为 正确行为
LWG 3892 C++20 格式说明 不存在时,pc.begin() 的值不明确 使之明确