Namespaces
Variants

C++ named requirements: Formatter (since C++20)

From cppreference.net
C++ named requirements

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

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

需求规范

当类型满足 BasicFormatter 且给定以下类型和值时,若下表所示表达式有效并具有指定语义,则该类型满足 Formatter 要求:

类型 定义
CharT 字符类型
Arg 格式化参数类型
Formatter 用于类型 Arg CharT Formatter 类型
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 类型的值 n fmt_ctx. arg ( n )
f. format ( arg, fmt_ctx ) FmtCtx::iterator 同上,但不修改 arg

缺陷报告

以下行为变更缺陷报告被追溯应用于先前发布的C++标准。

DR 适用范围 发布时的行为 正确行为
LWG 3892 C++20 format-spec 不存在时, pc. begin ( ) 的值不明确 已明确说明