Namespaces
Variants

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

From cppreference.net
Определено в заголовочном файле <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::runtime_format (since C++26) .

Содержание

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

(constructor)
создает basic_format_string , вызывая ошибку компиляции если аргумент не является строкой формата
(public member function)
get
возвращает обернутую строку
(public member function)

std::basic_format_string:: basic_format_string

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

Параметры

s - объект, представляющий строку формата. Строка формата состоит из:
  • обычных символов (кроме { и } ), которые копируются в вывод без изменений,
  • 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 .

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);
// Вызывает format<double, int>. Args выводятся из 1.0, 2
// Из-за использования type_identity_t в format_string, вывод аргументов шаблона
// не учитывает тип строки формата.

Пример

Отчеты о дефектах

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

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