std::formatted_size
来自 cppreference.com
定义在头文件 <format> 中 |
||
template< class... Args > std::size_t formatted_size( std::format_string<Args...> fmt, Args&&... args ); |
(1) | (自 C++20) |
template< class... Args > std::size_t formatted_size( std::wformat_string<Args...> fmt, Args&&... args ); |
(2) | (自 C++20) |
template< class... Args > std::size_t formatted_size( const std::locale& loc, |
(3) | (自 C++20) |
template< class... Args > std::size_t formatted_size( const std::locale& loc, |
(4) | (自 C++20) |
通过根据格式字符串 fmt 格式化 args 来确定格式化字符串中的总字符数。如果有,则 loc 用于特定于区域设置的格式化。
如果对于 Args
中的任何 Ti
,std::formatter<std::remove_cvref_t<Ti>, CharT> 不满足 BasicFormatter 要求,则行为未定义。
内容 |
[编辑] 参数
fmt | - | 表示格式字符串的对象。格式字符串由以下内容组成:
每个替换字段具有以下格式:
1) 没有格式规范的替换字段
2) 有格式规范的替换字段
| ||||||||||||||||||||||||||||||||||||||||||||||
args... | - | 要格式化的参数 | ||||||||||||||||||||||||||||||||||||||||||||||
loc | - | 用于特定于区域设置的格式化的 std::locale |
[编辑] 返回值
格式化字符串中的总字符数。
[编辑] 异常
传播格式化程序抛出的任何异常。
[编辑] 示例
运行此代码
#include <format> #include <iomanip> #include <iostream> #include <string_view> #include <vector> int main() { using namespace std::literals::string_view_literals; constexpr auto fmt_str{"Hubble's H{0} {1} {2:*^4} miles/sec/mpc."sv}; constexpr auto sub_zero{"\N{SUBSCRIPT ZERO}"sv}; // "₀" or {0342, 130, 128} constexpr auto aprox_equ{"\N{APPROXIMATELY EQUAL TO}"sv}; // "≅" or {0342, 137, 133} constexpr int Ho{42}; // H₀ const auto min_buffer_size{std::formatted_size(fmt_str, sub_zero, aprox_equ, Ho)}; std::cout << "Min buffer size = " << min_buffer_size << '\n'; // Use std::vector as dynamic buffer. The buffer does not include the trailing '\0'. std::vector<char> buffer(min_buffer_size); std::format_to_n(buffer.data(), buffer.size(), fmt_str, sub_zero, aprox_equ, Ho); std::cout << "Buffer: " << std::quoted(std::string_view{buffer.data(), min_buffer_size}) << '\n'; // Print the buffer directly after adding the trailing '\0'. buffer.push_back('\0'); std::cout << "Buffer: " << std::quoted(buffer.data()) << '\n'; }
输出
Min buffer size = 37 Buffer: "Hubble's H₀ ≅ *42* miles/sec/mpc." Buffer: "Hubble's H₀ ≅ *42* miles/sec/mpc."
[编辑] 缺陷报告
以下行为更改的缺陷报告被追溯应用于之前发布的 C++ 标准。
DR | 应用于 | 已发布的行为 | 正确行为 |
---|---|---|---|
P2216R3 | C++20 | 抛出 std::format_error 用于无效格式字符串 | 无效格式字符串导致编译时错误 |
P2418R2 | C++20 | 既不是常量可使用也不是可复制的对象 (例如生成器类对象) 不可格式化 |
允许格式化这些对象 |
P2508R1 | C++20 | 此工具没有用户可见的名称 | 公开名称 basic_format_string |
[编辑] 另请参阅
(C++20) |
通过输出迭代器写入其参数的格式化表示 (函数模板) |
(C++20) |
通过输出迭代器写入其参数的格式化表示,但不超过指定大小 (函数模板) |