std::basic_format_string, std::format_string, std::wformat_string

来自cppreference.com
< cpp‎ | utility‎ | format
 
 
工具库
语言支持
类型支持(基本类型、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)

 
 
在标头 <format> 定义
template< class CharT, class... Args >
struct basic_format_string;
(1) (C++20 起)
template< class... Args >

using format_string =

    basic_format_string<char, std::type_identity_t<Args>...>;
(2) (C++20 起)
template< class... Args >

using wformat_string =

    basic_format_string<wchar_t, std::type_identity_t<Args>...>;
(3) (C++20 起)

类模板 std::basic_format_string 包装一个用于格式化函数的 std::basic_string_view

除非构造函数实参是从 std::runtime_format 返回的,否则 (C++26 起)std::basic_format_string 的构造函数执行编译时格式字符串检查。

成员函数

(构造函数)
构造 basic_format_string,当实参不是格式字符串时引起编译错误
(公开成员函数)
get
返回包装的字符串
(公开成员函数)

std::basic_format_string::basic_format_string

template< class T >
consteval basic_format_string( const T& s );
(1)
basic_format_string( /* 运行时格式字符串 */<CharT> s ) noexcept;
(2) (C++26 起)
1) 构造 basic_format_string 对象,用于存储字符串 s 的视图。如果实参不是编译时常量,或者无法解析为针对格式化参数类型 Args 的格式字符串,则构造非良构。
此重载只有在 const T& 实现 std::convertible_to<std::basic_string_view<CharT>> 时才会参与重载决议。
2) 构造 basic_format_string 对象,用于存储 std::runtime_format 返回的字符串 s 的视图。不会在构造时执行格式字符串检查。

参数

s - 用于表示格式字符串的对象。格式字符串由以下组成
  • 通常字符(除了 {}),它们被不加修改地复制到输出,
  • 转义序列 {{}} ,它们在输出中被分别替换成 {} ,以及
  • 替换域。

每个替换域拥有如下格式:

{ 实参索引 (可选) } (1)
{ 实参索引 (可选) : 格式说明 } (2)
1) 没有格式说明的替换域
2) 有格式说明的替换域
实参索引 - 指定用于格式化它的值的 args 中的参数的下标;如果省略实参索引,那么按顺序使用参数。

格式字符串中的实参索引 必须全部存在或全部被省略。混合手动和自动指定下标是错误。

格式说明 - 格式说明由对应参数特化的 std::formatter 定义。不能以 } 开始。

(C++23 起)
(C++26 起)
  • 对于其他可格式化类型,格式说明由用户定义的 std::formatter 特化决定。

std::basic_format_string::get

constexpr std::basic_string_view<CharT> get() const noexcept;

返回储存的字符串视图。

注解

别名模板 format_stringwformat_string 使用 std::type_identity_t 来抑制模板实参推导。通常情况下,当它们作为函数形参出现时,它们的模板参数会从其他函数实参中推导出来。

template<class... Args>
std::string format(std::format_string<Args...> fmt, Args&&... args);
 
auto s = format("{} {}", 1.0, 2);
// 调用 format<double, int>。Args 会从 1.0, 2 推导
// 由于 format_string 中使用了 type_identity_t,
// 因此模板实参推导不会考虑格式字符串的类型。

示例

缺陷报告

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

缺陷报告 应用于 出版时的行为 正确行为
P2508R1 C++20 这个设施没有用户可见的名字 暴露出 basic_format_string 的名字