std:: format
|
Определено в заголовочном файле
<format>
|
||
|
template
<
class
...
Args
>
std:: string format ( std:: format_string < Args... > fmt, Args && ... args ) ; |
(1) | (начиная с C++20) |
|
template
<
class
...
Args
>
std:: wstring format ( std:: wformat_string < Args... > fmt, Args && ... args ) ; |
(2) | (начиная с C++20) |
|
template
<
class
...
Args
>
std::
string
format
(
const
std::
locale
&
loc,
|
(3) | (начиная с C++20) |
|
template
<
class
...
Args
>
std::
wstring
format
(
const
std::
locale
&
loc,
|
(4) | (начиная с C++20) |
Форматируйте args в соответствии со строкой формата fmt и верните результат в виде строки. Если присутствует, loc используется для локализованного форматирования.
Строка формата
fmt
проверяется во время компиляции
если она не инициализирована результатом вызова
std::runtime_format
(since C++26)
. Если во время компиляции строка формата оказывается невалидной для типов форматируемых аргументов, будет выдана ошибка компиляции.
Следующие требования применяются к каждому типу
T
в
Args
, где
CharT
является
char
для перегрузок
(1,3)
,
wchar_t
для перегрузок
(2,4)
:
- std:: formatter < T, CharT > должен удовлетворять требованиям BasicFormatter
- std:: formatter < T, CharT > :: parse ( ) должен быть constexpr для целей проверки строки форматирования на этапе компиляции.
Содержание |
Параметры
| fmt | - |
Каждое поле замены имеет следующий формат:
1)
поле замены без спецификации формата
2)
поле замены со спецификацией формата
|
||||||||||||||||||||||||||||||||||||||||||||||
| args... | - | аргументы для форматирования | ||||||||||||||||||||||||||||||||||||||||||||||
| loc | - | std::locale используется для локале-специфичного форматирования | ||||||||||||||||||||||||||||||||||||||||||||||
Возвращаемое значение
Строковый объект, содержащий отформатированный результат.
Исключения
Выбрасывает std::bad_alloc при ошибке выделения памяти. Также распространяет исключение, выброшенное любым форматтером.
Примечания
Не является ошибкой предоставить больше аргументов, чем требует строка формата:
std::format("{} {}!", "Hello", "world", "something"); // OK, возвращает "Hello world!"
Ошибкой является, если строка формата не является константным выражением
если только она не инициализирована результатом
std::runtime_format
(начиная с C++26)
.
std::vformat
не имеет этого требования.
std::string f1(std::string_view runtime_format_string) { // return std::format(runtime_format_string, "x", 42); // ошибка char v1[] = "x"; int v2 = 42; return std::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) { return std::vformat(rt_fmt_str, std::make_format_args(args...)); } int main() { #ifdef __cpp_lib_format_ranges const std::set<std::string_view> continents { "Africa", "America", "Antarctica", "Asia", "Australia", "Europe" }; std::cout << std::format("Hello {}!\n", continents); #else std::cout << std::format("Hello {}!\n", "continents"); #endif std::string fmt; for (int i{}; i != 3; ++i) { fmt += "{} "; // constructs the formatting string std::cout << fmt << " : "; std::cout << dyna_print(fmt, "alpha", 'Z', 3.14, "unused"); std::cout << '\n'; } }
Возможный вывод:
Hello {"Africa", "America", "Antarctica", "Asia", "Australia", "Europe"}!
{} : alpha
{} {} : alpha Z
{} {} {} : alpha Z 3.14
Отчеты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| P2216R3 | C++20 | throws std::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 name
basic_format_string
is exposed
|
Смотрите также
|
(C++20)
|
записывает форматированное представление своих аргументов через выходной итератор
(function template) |
|
(C++20)
|
записывает форматированное представление своих аргументов через выходной итератор, не превышая указанный размер
(function template) |