Библиотека форматирования (C++20)
Материал из cppreference.com
Библиотека форматирования текста предлагает безопасную и расширяемую альтернативу семейству функций printf. Она предназначена для дополнения существующей библиотеки потоков ввода-вывода C++ и повторного использования некоторых элементов её инфраструктуры, таких как перегруженные операторы вставки для определяемых пользователем типов.
Запустить этот код
#include <format>
#include <cassert>
int main() {
std::string message = std::format("Ответ {}.", 42);
assert( message == "Ответ 42." );
}
Функции форматирования
(C++20) |
сохраняет форматированное представление аргументов в новой строке (шаблон функции) |
(C++20) |
записывает форматированное представление своих аргументов через итератор вывода (шаблон функции) |
(C++20) |
записывает форматированное представление своих аргументов через итератор вывода, не превышая заданного размера (шаблон функции) |
(C++20) |
определяет количество символов, необходимых для хранения форматированного представления его аргументов (шаблон функции) |
Поддержка расширяемости и детали реализации
(C++20) |
нешаблонный вариант std::format с использованием представления аргументов с удалением типа (функция) |
(C++20) |
нешаблонный вариант std::format_to с использованием представления аргументов с удалением типа (шаблон функции) |
(C++20) |
шаблонный класс, который предоставляет доступ к аргументу форматирования для определяемых пользователем средств форматирования (шаблон класса) |
(C++20) |
шаблонный класс, который определяет правила форматирования для данного типа (шаблон класса) |
(C++20)(C++20)(C++20) |
состояние парсера строки форматирования (шаблон класса) |
(C++20)(C++20)(C++20) |
состояние форматирования, включая все аргументы форматирования и итератор вывода (шаблон класса) |
(C++20) (устарело в C++26) |
интерфейс посещения аргументов для определяемых пользователем средств форматирования (шаблон функции) |
(C++20)(C++20) |
создаёт объект с удалением типа, ссылающийся на все аргументы форматирования, конвертируемый в format_args (шаблон функции) |
(C++20)(C++20)(C++20) |
класс, который обеспечивает доступ ко всем аргументам форматирования (шаблон класса) |
(C++20) |
тип исключения, возникающий при ошибках форматирования (класс) |
Примечание
| Макрос тест функциональности | Значение | Стандарт | Комментарий |
|---|---|---|---|
__cpp_lib_format |
201907L |
(C++20) | |
__cpp_lib_format |
202106L |
(C++20)(DR) | Проверка строки формата во время компиляции; Уменьшение параметризации std::vformat_to |
__cpp_lib_format |
202110L |
(C++20)(DR) | Исправление обработки локали в chrono форматтерах; Поддержка неконстантных форматируемых типов |
__cpp_lib_format |
202207L |
(C++23) |
Отчёты о дефектах
Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:
| Номер | Применён | Поведение в стандарте | Корректное поведение |
|---|---|---|---|
| WG не указан | C++20 | объекты, которые не являются ни константно-форматируемыми, ни копируемыми (например, объекты, подобные генератору), не форматируются |
разрешено форматирование этих объектов (смягчены требования форматирования) |