Namespaces
Variants

std:: print

From cppreference.net
< cpp ‎ | io
Определено в заголовочном файле <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 - объект, представляющий строку формата. Строка формата состоит из
  • обычных символов (кроме { и } ), которые копируются в вывод без изменений,
  • escape-последовательностей { { и } } , которые заменяются на { и } соответственно в выводе, и
  • полей замены.

Каждое поле замены имеет следующий формат:

{ arg-id (опционально) } (1)
{ arg-id (опционально) : format-spec } (2)
1) поле замены без спецификации формата
2) поле замены со спецификацией формата
arg-id - указывает индекс аргумента в args , значение которого должно быть использовано для форматирования; если опущено, аргументы используются по порядку.

Все arg-id  в строке формата должны быть либо указаны, либо опущены. Смешивание ручной и автоматической индексации является ошибкой.

format-spec - спецификация формата, определяемая специализацией std::formatter для соответствующего аргумента. Не может начинаться с } .

(since C++23)
(since C++26)
  • Для других форматируемых типов спецификация формата определяется пользовательскими специализациями formatter .
args... - аргументы для форматирования

Исключения

Примечания

Макрос тестирования возможностей Значение Стандарт Возможность
__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");  // перегрузка (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()); // перегрузка (2)
        std::fclose(stream);
    }
}

Вывод:

Hello C++23!

Отчеты о дефектах

Следующие отчеты об изменениях в поведении, являющиеся дефектными, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Applied to Behavior as published Correct behavior
P3107R5 C++23 only buffered printing operations can be performed can perform unbuffered printing operations
P3235R3 C++23 the names of the functions added
by P3107R5 were misleading
changed the function names

Смотрите также

(C++23)
то же, что std::print , но каждый вывод завершается дополнительным переводом строки
(шаблон функции)
выводит форматированное представление аргументов
(шаблон функции)
(C++20)
сохраняет форматированное представление аргументов в новой строке
(шаблон функции)
(C++20)
записывает форматированное представление аргументов через выходной итератор
(шаблон функции)
выводит форматированные данные в stdout , файловый поток или буфер
(функция)