Formatting library (since 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)
|
тип исключения, выбрасываемого при ошибках форматирования
(класс) |
Вспомогательные элементы (since C++23)
|
template
<
class
R,
class
CharT
>
concept
/*const-formattable-range*/
=
|
(1) | ( только для демонстрации* ) |
|
template
<
class
R,
class
CharT
>
using
/*fmt-maybe-const*/
=
|
(2) | ( только для демонстрации* ) |
Примечания
| Макрос тестирования возможностей | Значение | Стандарт | Возможность | |
|---|---|---|---|---|
__cpp_lib_format
|
201907L
|
(C++20) | Форматирование текста | |
202106L
|
(C++23)
(DR20) |
Проверки строки формата на этапе компиляции;
Уменьшение параметризации std::vformat_to |
||
202110L
|
(C++23)
(DR20) |
Исправление обработки локали в форматтерах chrono;
Поддержка типов, не являющихся константно-форматируемыми |
||
202207L
|
(C++23)
(DR20) |
Предоставление
std::basic_format_string
;
Уточнение обработки кодировок при локализованном форматировании типов chrono |
||
202304L
|
(C++26) | Форматирование указателей | ||
202305L
|
(C++26) | Проверка типов аргументов формата | ||
202306L
|
(C++26) |
Функция-член
std::basic_format_arg::visit
|
||
202311L
|
(C++26) | Строка формата времени выполнения | ||
202403L
|
(C++26) | Вывод пустых строк с помощью std::println | ||
202403L
|
(C++26)
(DR23) |
Разрешение эффективной реализации
std::print
|
||
__cpp_lib_format_ranges
|
202207L
|
(C++23) | Форматирование диапазонов | |
__cpp_lib_format_path
|
202403L
|
(C++26) | Форматирование std::filesystem::path | |
__cpp_lib_format_uchar
|
202311L
|
(C++26) | Исправление форматирования кодовых единиц как целых чисел | |
__cpp_lib_formatters
|
202302L
|
(C++23) | Форматирование std::thread::id и std::stacktrace |
Мы намеренно рассматриваем добавление
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 | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| P2418R2 | C++20 |
объекты, которые не являются ни константно-форматируемыми, ни копируемыми
(такие как генератороподобные объекты) не являются форматируемыми |
разрешить форматирование этих объектов
(ослабленные требования к форматтерам) |
| P2508R1 | C++20 | нет пользовательского имени для этого механизма |
имя
basic_format_string
становится доступным
|
Смотрите также
|
(C++23)
|
выводит в
stdout
или файловый поток с использованием
форматированного
представления аргументов
(шаблон функции) |
|
(C++23)
|
то же, что и
std::print
за исключением того, что каждый вывод завершается дополнительным переводом строки
(шаблон функции) |
|
(C++23)
|
выводит
форматированное
представление аргументов
(шаблон функции) |