Spec-Zone.ru › C++

std::basic_format_string, std::format_string, std::wformat_string

Определён в заголовочном файле <format>
template< class CharT, class... Args >
struct basic_format_string;
(1) (начиная с C++20)
template< class... Args >
using format_string =
    basic_format_string<char, std::type_identity_t<Args>...>;
(2) (начиная с C++20)
template< class... Args >
using wformat_string =
    basic_format_string<wchar_t, std::type_identity_t<Args>...>;
(3) (начиная с C++20)

Шаблон класса std::basic_format_string оборачивает std::basic_string_view, который будет использоваться функциями форматирования.

Конструктор std::basic_format_string выполняет проверку форматной строки во время компиляции, если только аргумент конструктора не возвращён функцией std::dynamic_format(начиная с C++26).

Функции-члены

(конструктор)
создаёт basic_format_string; если аргумент не является форматной строкой, возникает ошибка компиляции
(открытая функция-член)
get
возвращает обёрнутую строку
(открытая функция-член)

std::basic_format_string::basic_format_string

template< class T >
consteval basic_format_string( const T& s );
(1)
basic_format_string( /* dynamic-format-string */<CharT> s ) noexcept;
(2) (начиная с C++26)
1) Создаёт объект basic_format_string, хранящий представление строки s. Если аргумент не является константой времени компиляции или не может быть разобран как форматная строка для типов форматируемых аргументов Args, программа некорректна.
Эта перегрузка участвует в разрешении перегрузки, только если constT& удовлетворяет требованиям std::convertible_to<std::basic_string_view<CharT>>.
2) Создаёт объект basic_format_string, хранящий представление строки s, возвращённой функцией std::dynamic_format. При создании проверка форматной строки не выполняется.

Параметры

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

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

{ 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)
  • Для std::filesystem::path см. спецификацию формата пути.
(начиная с C++26)
  • Для других форматируемых типов спецификация формата определяется пользовательскими специализациями formatter.

std::basic_format_string::get

constexpr std::basic_string_view<CharT> get() const noexcept;

Возвращает сохранённое представление строки.

Примечания

Шаблоны псевдонимов format_string и wformat_string используют std::type_identity_t, чтобы запретить вывод аргументов шаблона. Обычно, когда они используются в качестве параметра функции, их аргументы шаблона выводятся из других аргументов функции.

template<class... Args>
std::string format(std::format_string<Args...> fmt, Args&&... args);

auto s = format("{} {}", 1.0, 2);
// Calls format<double, int>. Args are deduced from 1.0, 2
// Due to the use of type_identity_t in format_string, template argument deduction
// does not consider the type of the format string.

Пример

Отчёты об ошибках стандарта

Следующие отчёты об ошибках, изменяющие поведение, были применены задним числом к ранее опубликованным стандартам C++.

DR Применён к Поведение согласно опубликованной версии Исправленное поведение
P2508R1 C++20 для этой возможности не было общедоступного имени имя basic_format_string стало доступно

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

Spec-Zone.ru

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