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 | ||||
format (C++20) | ||||
(C++20) | ||||
(C++20) | ||||
(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::string format(std::format_string<Args...> fmt, Args&&...args); | (1) | (since C++20) |
template<class...Args> std::wstring format(std::wformat_string<Args...> fmt, Args&&...args); | (2) | (since C++20) |
template<class...Args> std::string format(conststd::locale& loc, | (3) | (since C++20) |
template<class...Args> std::wstring format(conststd::locale& loc, | (4) | (since C++20) |
Formatargs according to the format stringfmt, and return the result as a string. If present,loc is used for locale-specific formatting.
The format stringfmt is checked at compile time unless it is initialized from the result ofstd::runtime_format
(since C++26). If, at compile time, the format string is found to be invalid for the types of the arguments to be formatted, a compilation error will be emitted.
The following requirements apply to each typeT
inArgs
, whereCharT
ischar for overloads(1,3),wchar_t for overloads(2,4):
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 |
A string object holding the formatted result.
Throwsstd::bad_alloc on allocation failure. Also propagates exception thrown by any formatter.
It is not an error to provide more arguments than the format string requires:
std::format("{} {}!","Hello","world","something");// OK, produces "Hello world!"
It is an error if the format string is not a constant expression unless it is initialized from the result ofstd::runtime_format
(since C++26).std::vformat does not have this requirement.
std::string f1(std::string_view runtime_format_string){// return std::format(runtime_format_string, "x", 42); // errorchar v1[]="x";int v2=42;returnstd::vformat(runtime_format_string,std::make_format_args(v1, v2));// OK} std::string f2(std::string_view runtime_format_string){return std::format(std::runtime_format(runtime_format_string),"x",42);// OK (C++26)}
#include <format>#include <iostream>#include <set>#include <string>#include <string_view> template<typename...Args>std::string dyna_print(std::string_view rt_fmt_str, Args&&...args){returnstd::vformat(rt_fmt_str,std::make_format_args(args...));} int main(){#ifdef __cpp_lib_format_rangesconststd::set<std::string_view> continents{"Africa","America","Antarctica","Asia","Australia","Europe"};std::cout<< std::format("Hello {}!\n", continents);#elsestd::cout<< std::format("Hello {}!\n","continents");#endif std::string fmt;for(int i{}; i!=3;++i){ fmt+="{} ";// constructs the formatting stringstd::cout<< fmt<<" : ";std::cout<< dyna_print(fmt,"alpha",'Z',3.14,"unused");std::cout<<'\n';}}
Possible output:
Hello {"Africa", "America", "Antarctica", "Asia", "Australia", "Europe"}!{} : alpha{} {} : alpha Z{} {} {} : alpha Z 3.14
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] |