命名空间
变体
操作

格式化库 (自 C++20 起)

来自 cppreference.com
< cpp‎ | utility
 
 
实用程序库
语言支持
类型支持(基本类型,RTTI)
库功能测试宏 (C++20)
动态内存管理
程序实用程序
协程支持 (C++20)
可变参数函数
调试支持
(C++26)
三路比较
(C++20)
(C++20)(C++20)(C++20)
(C++20)(C++20)(C++20)
通用实用程序
日期和时间
函数对象
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中已弃用)
整数比较函数
(C++20)(C++20)(C++20)   
(C++20)
交换类型操作
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
通用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
基本字符串转换
(C++17)
(C++17)

 
 

文本格式化库为 printf 函数族提供了一个安全且可扩展的替代方案。它旨在补充现有的 C++ I/O 流库。

内容

[编辑] 格式规范

格式规范指定了如何使用不同类型的选项来格式化对象。

基本类型和标准字符串类型的对象的格式化使用 基本格式规范。其他库组件也可能提供自己的格式规范,请参阅 此处 获取详细信息。

[编辑] 格式化函数

定义在头文件 <format>
(C++20)
将参数的格式化表示存储在一个新字符串中
(函数模板) [编辑]
(C++20)
通过输出迭代器写入参数的格式化表示
(函数模板) [编辑]
通过输出迭代器写入参数的格式化表示,但不超过指定大小
(函数模板) [编辑]
确定存储参数的格式化表示所需的字符数
(函数模板) [编辑]

[编辑] 格式字符串

定义在头文件 <format>
类模板,在构造时执行编译时格式字符串检查
(类模板) [编辑]
直接创建可用于面向用户的格式化函数的运行时格式字符串
(函数) [编辑]

[编辑] 格式化概念

定义在头文件 <format>
指定类型是可格式化的,也就是说,它专门化了 std::formatter 并提供成员函数 parseformat
(概念) [编辑]

[编辑] 可扩展性支持和实现细节

定义在头文件 <format>
(C++20)
使用类型擦除参数表示的 std::format 的非模板变体
(函数) [编辑]
使用类型擦除参数表示的 std::format_to 的非模板变体
(函数模板) [编辑]
创建一个类型擦除对象,引用所有格式化参数,可转换为 format_args
(函数模板) [编辑]
(C++20) (C++26 中已弃用)
用于用户定义格式器的参数访问接口
(函数模板) [编辑]
(C++20)
定义给定类型的格式化规则
(类模板) [编辑]
类模板,有助于为范围类型实现 std::formatter 专门化
(类模板) [编辑]
指示参数类型可以有效地打印
(变量模板)[编辑]
指定范围的格式化方式
(枚举) [编辑]
为范围选择一个合适的 std::range_format
(变量模板)[编辑]
类模板,为用户定义的格式化程序提供对格式化参数的访问
(类模板) [编辑]
类,提供对所有格式化参数的访问
(类模板) [编辑]
格式化状态,包括所有格式化参数和输出迭代器
(类模板) [编辑]
格式化字符串解析器状态
(类模板) [编辑]
格式化错误时抛出的异常类型
(类) [编辑]

[编辑] 辅助项 (自 C++23)

template< class R, class CharT >

concept /*const-formattable-range*/ =
    ranges::input_range<const R> &&

    std::formattable<ranges::range_reference_t<const R>, CharT>;
(1) ((仅供说明*)
template< class R, class CharT >

using /*fmt-maybe-const*/ =

    std::conditional_t</*const-formattable-range*/<R, CharT>, const R, R>;
(2) ((仅供说明*)

[编辑] 说明

特性测试 Std 特性
__cpp_lib_format 201907L (C++20) 文本格式化
202106L (C++20)
(DR)
编译时格式字符串检查;
减少 std::vformat_to 的参数化
202110L (C++20)
(DR)
修复 chrono 格式化程序中的区域设置处理;
支持非 const 可格式化类型
202207L (C++20)
(DR)
公开 std::basic_format_string
澄清在 chrono 类型的本地化格式化中处理编码的方式
202304L (C++26) 格式化指针
202305L (C++26) 类型检查格式参数
202306L (C++26) 成员 std::basic_format_arg::visit
202311L (C++26) 运行时格式字符串
__cpp_lib_format_ranges 202207L (C++23) 格式化范围

我们有意将添加 std::basic_format_string (P2508) 视为缺陷报告,因为所有已知实现都以 C++20 模式提供这些组件,尽管官方上没有将其归类为缺陷报告。

[编辑] 示例

#include <cassert>
#include <format>
 
int main()
{
    std::string message = std::format("The answer is {}.", 42);
    assert(message == "The answer is 42.");
}

[编辑] 缺陷报告

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

DR 应用于 发布的行为 正确的行为
P2418R2 C++20 既不是可 const 格式化也不是可复制的对象
(例如,类似于生成器的对象) 不可格式化
允许格式化这些对象
(放松了格式化程序要求)
P2508R1 C++20 此功能没有用户可见的名称 公开了名称 basic_format_string

[编辑] 另请参见

(C++23)
使用参数的 格式化 表示打印到 stdout 或文件流
(函数模板) [编辑]
(C++23)
std::print 相同,只是每次打印都以额外的换行符结尾
(函数模板) [编辑]
输出参数的 格式化 表示
(函数模板) [编辑]