Spec-Zone.ru › C++

std::vformat

Определено в заголовке <format>
std::string vformat( std::string_view fmt, std::format_args args );
(1) (с C++20)
std::wstring vformat( std::wstring_view fmt, std::wformat_args args );
(2) (с C++20)
std::string vformat( const std::locale& loc,
                     std::string_view fmt, std::format_args args );
(3) (с C++20)
std::wstring vformat( const std::locale& loc,
                      std::wstring_view fmt, std::wformat_args args );
(4) (с C++20)

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

Параметры

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

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

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

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

format-spec - спецификация форматирования, определённая специализацией std::formatter для соответствующего аргумента.
  • Для основных типов и стандартных типов строк спецификация форматирования интерпретируется как стандартная спецификация форматирования.
  • Для типов chrono спецификация форматирования интерпретируется как спецификация форматирования chrono.
  • Для типов диапазонов спецификация форматирования интерпретируется как спецификация форматирования диапазона.
  • Для std::pair и std::tuple, спецификация форматирования интерпретируется как спецификация форматирования кортежа.
  • Для std::thread::id и std::stacktrace_entry, см. спецификацию форматирования идентификатора потока и спецификацию форматирования записи трассировки стека.
  • Для std::basic_stacktrace спецификатор форматирования не допускается.
(с C++23)
  • Для других форматируемых типов спецификация форматирования определяется пользовательскими 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

См. также

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/utility/format/vformat

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API