Пространства имён
Варианты
Действия

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

Материал из cppreference.com
< cpp‎ | utility
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм (C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования (C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
Библиотека форматирования
Функции форматирования
(C++20)
(C++20)
(C++20)
(C++20)
Концепты форматирования
Форматировщик
(C++20)
Аргументы форматирования
(C++20) (устарело в C++26)
Ошибка формата
 

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

#include <format>
#include <cassert>
int main() {
    std::string message = std::format("Ответ {}.", 42);
    assert( message == "Ответ 42." );
}

Содержание

[править] Функции форматирования

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

[править] Концепты форматирования

Определены в заголовочном файле <format>
указывает, что тип является форматируемым, то есть он специализирует std::formatter и предоставляет функции-элементы parse и format
(концепт) [править]

[править] Поддержка расширяемости и детали реализации

Определены в заголовочном файле <format>
(C++20)
нешаблонный вариант std::format с использованием представления аргументов с удалением типа
(функция) [править]
нешаблонный вариант std::format_to с использованием представления аргументов с удалением типа
(шаблон функции) [править]
создаёт объект с удалением типа, ссылающийся на все аргументы форматирования, конвертируемый в format_args
(шаблон функции) [править]
(C++20) (устарело в C++26)
интерфейс посещения аргументов для определяемых пользователем средств форматирования
(шаблон функции) [править]
(C++20)
шаблонный класс, который определяет правила форматирования для данного типа
(шаблон класса) [править]
шаблонный класс, который помогает реализовать специализации std::formatter для диапазонных типов
(шаблон класса) [править]
указывает, как должен быть отформатирован диапазон
(перечисление) [править]
выбирает подходящий std::range_format для диапазона
(шаблонная переменная) [править]
шаблонный класс, который предоставляет доступ к аргументу форматирования для определяемых пользователем средств форматирования
(шаблон класса) [править]
класс, который обеспечивает доступ ко всем аргументам форматирования
(шаблон класса) [править]
шаблон класса, который выполняет проверку строки формата во время компиляции во время построения
(шаблон класса) [править]
состояние форматирования, включая все аргументы форматирования и итератор вывода
(шаблон класса) [править]
состояние парсера строки форматирования
(шаблон класса) [править]
тип исключения, возникающий при ошибках форматирования
(класс) [править]

[править] Примечание

Макрос тест функциональности
__cpp_lib_format 201907L (C++20) Форматирование текста
202106L (C++20) Проверка строки формата во время компиляции;
Уменьшение параметризации std::vformat_to
202110L (C++20) Исправление обработки локали в chrono форматтерах;
Поддержка неконстантных форматируемых типов
202207L (C++23) Раскрытие std::basic_format_string;
Уточняет обработку кодировок в локализованном форматировании хронотипов
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("Ответ {}.", 42);
    assert( message == "Ответ 42." );
}

[править] Отчёты о дефектах

Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:

Номер Применён Поведение в стандарте Корректное поведение
WG не указан C++20 объекты, которые не являются ни константно-форматируемыми,
ни копируемыми (например, объекты, подобные генератору),
не форматируются
разрешено форматирование этих объектов
(смягчены требования форматирования)
WG не указан C++20 для этого средства нет видимого пользователем имени представлено имя basic_format_string

[править] Смотрите также

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