Namespaces
Variants

std:: vformat

From cppreference.net
Определено в заголовке <format>
(1) (начиная с C++20)
(2) (начиная с C++20)
(3) (начиная с C++20)
(4) (начиная с C++20)

Форматирует аргументы, содержащиеся в args , в соответствии со строкой формата fmt , и возвращает результат в виде строки. Если присутствует, loc используется для локализованного форматирования.

Содержание

Параметры

fmt - объект, представляющий строку формата. Строка формата состоит из
  • обычных символов (кроме { и } ), которые копируются в вывод без изменений,
  • escape-последовательностей { { и } } , которые заменяются на { и } соответственно в выводе, и
  • полей замены.

Каждое поле замены имеет следующий формат:

{ arg-id (необязательно) } (1)
{ arg-id (необязательно) : format-spec } (2)
1) поле замены без спецификации формата
2) поле замены со спецификацией формата
arg-id - указывает индекс аргумента в args , значение которого должно быть использовано для форматирования; если он опущен, аргументы используются по порядку.

Все arg-id  в строке формата должны быть либо указаны, либо опущены. Смешение ручной и автоматической индексации является ошибкой.

format-spec - спецификация формата, определяемая специализацией std::formatter для соответствующего аргумента. Не может начинаться с } .

(since C++23)
(since C++26)
  • Для других форматируемых типов спецификация формата определяется пользовательскими специализациями formatter .
args - аргументы для форматирования
loc - std::locale используемая для локале-специфичного форматирования

Возвращаемое значение

Строковый объект, содержащий отформатированный результат.

Исключения

Выбрасывает std::format_error если fmt не является корректной строкой формата для предоставленных аргументов, или std::bad_alloc при ошибке выделения памяти. Также распространяет любые исключения, выброшенные операциями форматирования или итераторов.

Пример

#include <format>
#include <iostream>
template<typename... Args>
inline void println(const std::format_string<Args...> fmt, Args&&... args)
{
    std::cout << std::vformat(fmt.get(), std::make_format_args(args...)) << '\n';
}
int main()
{
    println("{}{} {}{}", "Hello", ',', "C++", -1 + 2 * 3 * 4);
}

Вывод:

Hello, C++23

Смотрите также