Namespaces
Variants

std:: runtime_format

From cppreference.net
Определено в заголовке <format>
/*runtime-format-string*/ < char > runtime_format ( std:: string_view fmt ) noexcept ;
(1) (начиная с C++26)
/*runtime-format-string*/ < wchar_t > runtime_format ( std:: wstring_view fmt ) noexcept ;
(2) (начиная с C++26)

Возвращает объект, который хранит строку формата времени выполнения, непосредственно применимую в пользовательских функциях форматирования и может быть неявно преобразован в std::basic_format_string .

Содержание

Параметры

fmt - строковое представление

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

Объект, содержащий строку формата времени выполнения типа, предназначенного только для экспозиции:

Шаблон класса runtime-format-string <CharT>

template < class CharT >
struct /*runtime-format-string*/ ;
( только для демонстрации* )

Члены-объекты

Возвращаемый объект содержит демонстрационный нестатический член данных str типа std::basic_string_view<CharT> .

Конструкторы и операторы присваивания

/*runtime-format-string*/ ( std:: basic_string_view < CharT > s ) noexcept ;
(1)
/*runtime-format-string*/ ( const /*runtime-format-string*/ & ) = delete ;
(2)
/*runtime-format-string*/ & operator = ( const /*runtime-format-string*/ & ) = delete ;
(3)
1) Инициализирует str значением s .
2) Конструктор копирования явно удален. Тип не является копируемым или перемещаемым.
3) Оператор присваивания явно удален.

Примечания

Поскольку возвращаемый тип runtime_format не является ни копируемым, ни перемещаемым, попытка передачи runtime_fmt как glvalue блокирует конструкцию std::basic_format_string , что приводит к ошибочности программы. Для конструирования std::basic_format_string с помощью runtime_format , возвращаемое значение runtime_format передаётся напрямую в std::basic_format_string как prvalue, где гарантируется пропуск копирования.

auto runtime_fmt = std::runtime_format("{}");
auto s0 = std::format(runtime_fmt, 1); // ошибка
auto s1 = std::format(std::move(runtime_fmt), 1); // всё ещё ошибка
auto s2 = std::format(std::runtime_format("{}"), 1); // корректно
Макрос тестирования возможностей Значение Стандарт Функция
__cpp_lib_format 202311L (C++26) Строки форматирования времени выполнения

Пример

#include <format>
#include <print>
#include <string>
#include <string_view>
int main()
{
    std::print("Hello {}!\n", "world");
    std::string fmt;
    for (int i{}; i != 3; ++i)
    {
        fmt += "{} "; // формирует строку форматирования
        std::print("{} : ", fmt);
        std::println(std::runtime_format(fmt), "alpha", 'Z', 3.14, "unused");
    }
}

Вывод:

Hello world!
{}  : alpha
{} {}  : alpha Z
{} {} {}  : alpha Z 3.14

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

(C++20)
сохраняет форматированное представление аргументов в новой строке
(шаблон функции)
(C++20)
нетемплейтный вариант std::format с использованием type-erased представления аргументов
(функция)
шаблон класса, выполняющий проверки форматной строки во время компиляции при создании
(шаблон класса)