Библиотека форматирования (с C++20)
Библиотека форматирования текста предлагает безопасную и расширяемую альтернативу функциям семейства printf. Она предназначена для дополнения существующей библиотеки ввода-вывода C++.
Функции форматирования
Определено в заголовке <format> |
|
|---|---|
|
(C++20) | сохраняет отформатированное представление аргументов в новой строке (шаблон функции) |
|
(C++20) | записывает отформатированное представление аргументов через итератор вывода (шаблон функции) |
|
(C++20) | записывает отформатированное представление аргументов через итератор вывода, не превышая указанный размер (шаблон функции) |
|
(C++20) | определяет количество символов, необходимое для хранения отформатированного представления аргументов (шаблон функции) |
Строки форматирования
Определено в заголовке <format> |
|
|---|---|
|
(C++20)(C++20)(C++20) | шаблон класса, выполняющий проверки строки форматирования на этапе компиляции во время создания (шаблон класса) |
|
(C++26) | создает строки форматирования во время выполнения, непосредственно используемые в пользовательских функциях форматирования (функция) |
Концепции форматирования
Определено в заголовке <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) | тип исключения, выбрасываемого при ошибках форматирования (класс) |
Примечания
| Тестирование функций макрос | Значение | Стандарт | Функция |
|---|---|---|---|
__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 экспонировано |
См. также
|
(C++23) | выводит в stdout или поток файла используя форматированное представление аргументов (шаблон функции) |
|
(C++23) | то же, что и std::print за исключением того, что каждый вывод завершается дополнительной новой строкой (шаблон функции) |
|
(C++23) | выводит форматированное представление аргументов (шаблон функции) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/utility/format