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

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

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

Макрос тест функциональности
__cpp_lib_format201907L(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_ranges202207L(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, за исключением того, что каждая печать заканчивается дополнительной новой строкой
(шаблон функции)[править]
выводит форматированное представление аргументов
(шаблон функции)[править]
close