名稱空間
變體
操作

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

來自 cppreference.com
 
 
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() 的值不明確 已明確