名稱空間
變體
操作

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

來自 cppreference.com
 
 
C++ 命名要求
基本
型別屬性
全庫範圍




Container(容器)
容器元素
迭代器 (Iterator)
流 I/O
格式化器
BasicFormatter(基本格式化器)
(C++20)
(C++20)
隨機數
併發
(C++11)
Ranges
多維檢視
其他

 

BasicFormatter 是一種型別,它為給定的格式化引數型別和字元型別抽象格式化操作。`std::formatter` 的特化需要滿足 `BasicFormatter` 的要求。

如果 `BasicFormatter` 能夠格式化 const 和非 const 引數,則它是一個 Formatter

[編輯] 要求

如果一個型別是半正則的,則它滿足 `BasicFormatter`,這意味著它滿足

並且,給定以下型別和值,下表中顯示錶達式是有效的並具有指示的語義

型別 定義
CharT 字元型別
Arg 格式化引數型別
Formatter 型別 `Arg` 和 `CharT` 的 `Formatter` 型別
OutputIt LegacyOutputIterator 型別
ParseCtx std::basic_format_parse_context<CharT>
FmtCtx std::basic_format_context<OutputIt, CharT>
定義
f 型別 `Formatter` 的值(可能是 const 限定的)
g 型別 `Formatter` 的值
arg 型別 `Arg` 的左值
t 可轉換為型別 `Arg` 的值(可能是 const 限定的)
parse_ctx 型別 `ParseCtx` 的左值,滿足以下所有條件
  • parse_ctx.begin() 指向 格式字串 中正在格式化的替換欄位的 format-spec 的開頭。
  • 如果 format-spec 不存在或為空,則 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` 的 format-spec 直到第一個不匹配的字元。
  • 除非整個範圍都被解析或者不匹配的字元是 },否則丟擲 std::format_error[注 1]
  • 將解析後的格式說明符儲存在 g 中,並返回解析範圍的結束迭代器。
f.format(arg, fmt_ctx) FmtCtx::iterator
  • 根據儲存在 f 中的說明符格式化 arg,將輸出寫入 fmt_ctx.out(),並返回輸出範圍的結束迭代器。
  • 輸出應僅取決於
    • arg,
    • fmt_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 如果 format-spec 不存在,pc.begin() 的值不明確 已明確