C++ 具名要求:基本格式化器 (BasicFormatter) (C++20 起)

来自cppreference.com
< cpp‎ | named req


 
 
C++ 具名要求
 

基本格式化器 (BasicFormatter) 是对给定的格式化参数类型及字符类型抽象格式化操作的类型。要求 std::formatter 的特化满足基本格式化器 (BasicFormatter)

能格式化 const 与非 const 的实参的基本格式化器 (BasicFormatter)格式化器 (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 类型的值
g Formatter 类型的值
arg Arg 类型左值
t 可转换到(可有 const 限定的)Arg 的类型的值
parse_ctx 满足以下所有条件的 ParseCtx 类型左值:
  • parse_ctx.begin() 指向格式字符串中格式化的替换域的格式说明 的开始处。
  • 如果格式说明 不存在或者为空,那么满足 parse_ctx.begin() == parse_ctx.end()*parse_ctx.begin() == '}' 之一。
fmt_ctx FmtCtx 类型左值
表达式 返回类型 语义
g.parse(parse_ctx) ParseCtx::iterator 
  • 在范围 [parse_ctx.begin()parse_ctx.end()) 中解析类型 Arg格式说明,直到首个不匹配的字符。
  • 抛出 std::format_error,除非整个范围得到分析或首个不匹配的字符为 }[注 1]
  • 存储分析的格式说明符到 g 中,并返回被分析范围的末尾迭代器。
f.format(arg, fmt_ctx) FmtCtx::iterator
  • 按照 f 中存储的说明符格式化 arg,将输出写到 fmt_ctx.out() 并返回输出范围的末尾迭代器。
  • 输出只能取决于
    • arg
    • format_ctx.locale()
    • 来自最后一次调用 f.parse(parse_ctx) 的范围 [parse_ctx.begin()parse_ctx.end()),以及
    • 对于任何 std::size_t 类型值 nfmt_ctx.arg(n)
  1. 这允许格式化器抛出有意义的错误消息。

缺陷报告

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

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