Spec-Zone.ru › C++

Библиотека форматирования (с C++20)

Библиотека форматирования текста предлагает безопасную и расширяемую альтернативу функциям семейства printf. Она предназначена для дополнения существующей библиотеки ввода-вывода C++.

Функции форматирования

Определено в заголовке <format>
format
(C++20)
сохраняет отформатированное представление аргументов в новой строке
(шаблон функции)
format_to
(C++20)
записывает отформатированное представление аргументов через итератор вывода
(шаблон функции)
format_to_n
(C++20)
записывает отформатированное представление аргументов через итератор вывода, не превышая указанный размер
(шаблон функции)
formatted_size
(C++20)
определяет количество символов, необходимое для хранения отформатированного представления аргументов
(шаблон функции)

Строки форматирования

Определено в заголовке <format>
basic_format_stringformat_stringwformat_string
(C++20)(C++20)(C++20)
шаблон класса, выполняющий проверки строки форматирования на этапе компиляции во время создания
(шаблон класса)
runtime_format
(C++26)
создает строки форматирования во время выполнения, непосредственно используемые в пользовательских функциях форматирования
(функция)

Концепции форматирования

Определено в заголовке <format>
formattable
(C++23)
указывает, что тип может быть отформатирован, то есть, он специализируется std::formatter и предоставляет члены-функции parse и format
(концепция)

Поддержка расширения и детали реализации

Определено в заголовке <format>
vformat
(C++20)
нешаблонный вариант std::format с использованием представлений аргументов с типом-стержнем
(функция)
vformat_to
(C++20)
нешаблонный вариант std::format_to с использованием представлений аргументов с типом-стержнем
(шаблон функции)
make_format_argsmake_wformat_args
(C++20)(C++20)
создаёт объект с типом-стержнем, ссылающийся на все аргументы форматирования, преобразуемый в format_args
(шаблон функции)
visit_format_arg
(C++20) (устарело в C++26)
интерфейс посещения аргументов для пользовательских форматирователей
(шаблон функции)
formatter
(C++20)
определяет правила форматирования для данного типа
(шаблон класса)
range_formatter
(C++23)
шаблон класса, который помогает реализовывать специализации std::formatter для типов диапазонов
(шаблон класса)
range_format
(C++23)
определяет, как должен быть отформатирован диапазон
(перечисление)
format_kind
(C++23)
выбирает подходящий std::range_format для диапазона
(шаблон переменной)
basic_format_arg
(C++20)
шаблон класса, обеспечивающий доступ к аргументу форматирования для пользовательских форматирователей
(шаблон класса)
basic_format_argsformat_argswformat_args
(C++20)(C++20)(C++20)
класс, обеспечивающий доступ ко всем аргументам форматирования
(шаблон класса)
basic_format_contextformat_contextwformat_context
(C++20)(C++20)(C++20)
состояние форматирования, включая все аргументы форматирования и итератор вывода
(шаблон класса)
basic_format_parse_contextformat_parse_contextwformat_parse_context
(C++20)(C++20)(C++20)
состояние анализатора строки форматирования
(шаблон класса)
format_error
(C++20)
тип исключения, выбрасываемого при ошибках форматирования
(класс)

Примечания

Тестирование функций макрос Значение Стандарт Функция
__cpp_lib_format 201907L (C++20) Форматирование текста
202106L (C++20)
(DR)
Проверка строк форматирования во время компиляции;
Уменьшение параметризации std::vformat_to
202110L (C++20)
(DR)
Исправление обработки локали в форматировщиках chrono;
Поддержка типов, не допускающих форматирование без const
202207L (C++23) Экспонирование std::basic_format_string;
Уточнение обработки кодировок при локализованном форматировании типов chrono
202304L (C++26) Форматирование указателей
202305L (C++26) Проверка типов аргументов форматирования
202306L (C++26) Член std::basic_format_arg::visit
__cpp_lib_format_ranges 202207L (C++23) Форматирование диапазонов

Мы намеренно рассматриваем добавление std::basic_format_string (P2508) как отчет о дефекте, поскольку все известные реализации предоставляют эти компоненты в режиме C++20, хотя официально это не обозначено.

Пример

#include <cassert>
#include <format>
 
int main()
{
    std::string message = std::format("The answer is {}.", 42);
    assert(message == "The answer is 42.");
}

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

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

DR Применён к Поведение, как опубликовано Правильное поведение
P2418R2 C++20 объекты, которые не являются ни const-форматируемыми, ни копируемыми
(например, объекты типа генератор) не могут быть отформатированы
разрешить форматирование этих объектов
(смягченные требования к форматировщику)
P2508R1 C++20 нет видимого пользователю имени для этой функции имя basic_format_string экспонировано

См. также

print
(C++23)
выводит в stdout или поток файла используя форматированное представление аргументов
(шаблон функции)
println
(C++23)
то же, что и std::print за исключением того, что каждый вывод завершается дополнительной новой строкой
(шаблон функции)
print(std::ostream)
(C++23)
выводит форматированное представление аргументов
(шаблон функции)

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

Spec-Zone.ru

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