std::print
Определено в заголовке <print> | ||
|---|---|---|
template< class... Args > void print( std::format_string<Args...> fmt, Args&&... args ); | (1) | (начиная с C++23) |
template< class... Args >
void print( std::FILE* stream,
std::format_string<Args...> fmt, Args&&... args );
| (2) | (начиная с C++23) |
Форматирует args согласно строке формата fmt и выводит результат в поток вывода.
1) Эквивалентно
std::print(stdout, fmt, std::forward<Args>(args)...).
2) Если кодировка обычных литералов — UTF-8, эквивалентно
(std::enable_nonlocking_formatter_optimization<std::remove_cvref_t<Args>> && ...)
? std::vprint_unicode(stream, fmt.str, std::make_format_args(args...))
: std::vprint_unicode_buffered(stream, fmt.str, std::make_format_args(args...));
В противном случае эквивалентно
(std::enable_nonlocking_formatter_optimization<std::remove_cvref_t<Args>> && ...)
? std::vprint_nonunicode(stream, fmt.str, std::make_format_args(args...))
: std::vprint_nonunicode_buffered(stream, fmt.str, std::make_format_args(args...));
Если std::formatter<Ti,char> не удовлетворяет требованиям BasicFormatter для любого Ti в Args (как того требует std::make_format_args), поведение не определено.
Параметры
| stream | - | поток вывода файла, в который производится запись | ||||||||||||||||
| fmt | - | объект, представляющий строку формата. Строка формата состоит из
Каждое поле подстановки имеет следующий формат:
|
||||||||||||||||
| args... | - | аргументы для форматирования |
Исключения
-
std::bad_allocпри сбое выделения памяти. -
std::system_error, если запись в поток завершается ошибкой. - Передаёт любое исключение, выброшенное используемыми форматтерами, например
std::format_error.
Примечания
| Макрос проверки поддержки | Значение | Стандарт | Возможность |
|---|---|---|---|
__cpp_lib_print | 202207L | (C++23) | Форматированный вывод |
202403L |
(C++26) (DR23) | Небуферизованный форматированный вывод | |
202406L |
(C++26) (DR23) | Разрешение небуферизованного форматированного вывода для большего числа форматируемых типов | |
__cpp_lib_format | 202207L | (C++23) | Предоставление std::basic_format_string |
Пример
#include <cstdio>
#include <filesystem>
#include <print>
int main()
{
std::print("{2} {1}{0}!\n", 23, "C++", "Hello"); // overload (1)
const auto tmp{std::filesystem::temp_directory_path() / "test.txt"};
if (std::FILE* stream{std::fopen(tmp.c_str(), "w")})
{
std::print(stream, "File: {}", tmp.string()); // overload (2)
std::fclose(stream);
}
}
Вывод:
Hello C++23!
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были ретроактивно применены к ранее опубликованным стандартам C++.
| DR | Применён к | Опубликованное поведение | Корректное поведение |
|---|---|---|---|
| P3107R5 | C++23 | можно выполнять только буферизованные операции вывода | можно выполнять небуферизованные операции вывода |
| P3235R3 | C++23 | имена функций, добавленных документом P3107R5, вводили в заблуждение | имена функций изменены |
См. также
|
(C++23) | то же, что и std::print, за исключением того, что после каждого вывода добавляется символ новой строки (функциональный шаблон) |
|
(C++23) | выводит форматированное представление аргументов (функциональный шаблон) |
|
(C++20) | сохраняет форматированное представление аргументов в новой строке (функциональный шаблон) |
|
(C++20) | записывает форматированное представление аргументов через выходной итератор (функциональный шаблон) |
|
(C++11) | выводит форматированные данные в stdout, файловый поток или буфер (функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/print