| Localization library | |||||||||||||||||||||||||
| Regular expressions library(C++11) | |||||||||||||||||||||||||
| Formatting library(C++20) | |||||||||||||||||||||||||
| Null-terminated sequence utilities | |||||||||||||||||||||||||
| Byte strings | |||||||||||||||||||||||||
| Multibyte strings | |||||||||||||||||||||||||
| Wide strings | |||||||||||||||||||||||||
| Primitive numeric conversions | |||||||||||||||||||||||||
| |||||||||||||||||||||||||
| Text encoding identifications | |||||||||||||||||||||||||
| |||||||||||||||||||||||||
| Standard format specification | ||||
| Formatting functions | ||||
(C++20) | ||||
(C++20) | ||||
(C++20) | ||||
formatted_size (C++20) | ||||
(C++20) | ||||
(C++20) | ||||
| Format strings | ||||
(C++20)(C++20)(C++20) | ||||
(C++26) | ||||
| Formatting concepts | ||||
(C++23) | ||||
| Formatter | ||||
(C++20) | ||||
(C++23) | ||||
(C++23) | ||||
(C++23) | ||||
(C++20)(C++20)(C++20) | ||||
(C++20)(C++20)(C++20) | ||||
(C++23) | ||||
(C++23) | ||||
| Formatting arguments | ||||
(C++20) | ||||
(C++20) | ||||
(C++20)(C++20)(C++20) | ||||
(C++20)(deprecated in C++26) | ||||
(C++20)(C++20) | ||||
| Format error | ||||
(C++20) |
Defined in header <format> | ||
template<class...Args> std::size_t formatted_size(std::format_string<Args...> fmt, Args&&...args); | (1) | (since C++20) |
template<class...Args> std::size_t formatted_size(std::wformat_string<Args...> fmt, Args&&...args); | (2) | (since C++20) |
template<class...Args> std::size_t formatted_size(conststd::locale& loc, | (3) | (since C++20) |
template<class...Args> std::size_t formatted_size(conststd::locale& loc, | (4) | (since C++20) |
Determine the total number of characters in the formatted string by formattingargs according to the format stringfmt. If present,loc is used for locale-specific formatting.
The behavior is undefined ifstd::formatter<std::remove_cvref_t<Ti>, CharT> does not meet theBasicFormatter requirements for anyTi inArgs.
Contents |
| fmt | - | an object that represents the format string. The format string consists of
Each replacement field has the following format:
1) replacement field without a format specification 2) replacement field with a format specification
| ||||||||||||||||||||||||||||||||||||||||||||||
| args... | - | arguments to be formatted | ||||||||||||||||||||||||||||||||||||||||||||||
| loc | - | std::locale used for locale-specific formatting | ||||||||||||||||||||||||||||||||||||||||||||||
The total number of characters in the formatted string.
Propagates any exception thrown by formatter.
#include <format>#include <iomanip>#include <iostream>#include <string_view>#include <vector> int main(){usingnamespace std::literals::string_view_literals; constexprauto fmt_str{"Hubble's H{0} {1} {2:*^4} miles/sec/mpc."sv};constexprauto sub_zero{"\N{SUBSCRIPT ZERO}"sv};// "₀" or {0342, 130, 128}constexprauto aprox_equ{"\N{APPROXIMATELY EQUAL TO}"sv};// "≅" or {0342, 137, 133}constexprint Ho{42};// H₀ constauto 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';}
Output:
Min buffer size = 37Buffer: "Hubble's H₀ ≅ *42* miles/sec/mpc."Buffer: "Hubble's H₀ ≅ *42* miles/sec/mpc."
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| P2216R3 | C++20 | throwsstd::format_error for invalid format string | invalid format string results in compile-time error |
| P2418R2 | C++20 | objects that are neither const-usable nor copyable (such as generator-like objects) are not formattable | allow formatting these objects |
| P2508R1 | C++20 | there's no user-visible name for this facility | the namebasic_format_string is exposed |
(C++20) | writes out formatted representation of its arguments through an output iterator (function template)[edit] |
(C++20) | writes out formatted representation of its arguments through an output iterator, not exceeding specified size (function template)[edit] |