Библиотека форматирования (C++20)
Материал из cppreference.com
Библиотека форматирования текста предлагает безопасную и расширяемую альтернативу семейству функций printf. Она предназначена для дополнения существующей библиотеки потоков ввода-вывода C++ и повторного использования некоторых элементов её инфраструктуры, таких как перегруженные операторы вставки для определяемых пользователем типов.
Запустить этот код
#include <format> #include <cassert> int main() { std::string message = std::format("Ответ {}.", 42); assert( message == "Ответ 42." ); }
Содержание |
[править] Функции форматирования
Определены в заголовочном файле
<format> | |
(C++20) |
сохраняет форматированное представление аргументов в новой строке (шаблон функции) |
(C++20) |
записывает форматированное представление своих аргументов через итератор вывода (шаблон функции) |
(C++20) |
записывает форматированное представление своих аргументов через итератор вывода, не превышая заданного размера (шаблон функции) |
(C++20) |
определяет количество символов, необходимых для хранения форматированного представления его аргументов (шаблон функции) |
[править] Концепты форматирования
Определены в заголовочном файле
<format> | |
(C++23) |
указывает, что тип является форматируемым, то есть он специализирует std::formatter и предоставляет функции-элементы parse и format (концепт) |
[править] Поддержка расширяемости и детали реализации
Определены в заголовочном файле
<format> | |
(C++20) |
нешаблонный вариант std::format с использованием представления аргументов с удалением типа (функция) |
(C++20) |
нешаблонный вариант std::format_to с использованием представления аргументов с удалением типа (шаблон функции) |
(C++20)(C++20) |
создаёт объект с удалением типа, ссылающийся на все аргументы форматирования, конвертируемый в format_args (шаблон функции) |
(C++20) (устарело в C++26) |
интерфейс посещения аргументов для определяемых пользователем средств форматирования (шаблон функции) |
(C++20) |
шаблонный класс, который определяет правила форматирования для данного типа (шаблон класса) |
(C++23) |
шаблонный класс, который помогает реализовать специализации std::formatter для диапазонных типов (шаблон класса) |
(C++23) |
указывает, как должен быть отформатирован диапазон (перечисление) |
(C++23) |
выбирает подходящий std::range_format для диапазона (шаблонная переменная) |
(C++20) |
шаблонный класс, который предоставляет доступ к аргументу форматирования для определяемых пользователем средств форматирования (шаблон класса) |
(C++20)(C++20)(C++20) |
класс, который обеспечивает доступ ко всем аргументам форматирования (шаблон класса) |
(C++20)(C++20)(C++20) |
шаблон класса, который выполняет проверку строки формата во время компиляции во время построения (шаблон класса) |
(C++20)(C++20)(C++20) |
состояние форматирования, включая все аргументы форматирования и итератор вывода (шаблон класса) |
(C++20)(C++20)(C++20) |
состояние парсера строки форматирования (шаблон класса) |
(C++20) |
тип исключения, возникающий при ошибках форматирования (класс) |
[править] Примечание
Макрос тест функциональности | |||
---|---|---|---|
__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, за исключением того, что каждая печать заканчивается дополнительной новой строкой (шаблон функции) |
(C++23) |
выводит форматированное представление аргументов (шаблон функции) |