Spec-Zone.ru › C++

std::print

Определено в заголовочном файле <print>
template< class... Args >
void print( std::FILE* stream,
            std::format_string<Args...> fmt, Args&&... args );
(1) (с C++23)
template< class... Args >
void print( std::format_string<Args...> fmt, Args&&... args );
(2) (с C++23)

Форматирует args согласно строке форматирования fmt, и выводит результат в поток.

1) если обычное кодирование литералов является UTF-8, эквивалентно:
  • std::vprint_unicode(stream, fmt.get(), std::make_format_args(args...));. Иначе,
  • std::vprint_nonunicode(stream, fmt.get(), std::make_format_args(args...));.
2) аналогично (1) с использованием стандартного потока вывода C stdout связанного с stream, т.е. std::print(stdout, fmt, args...);

Поведение является неопределённым, если std::formatter<Ti, char> не удовлетворяет требованиям BasicFormatter для любого Ti в Args (как требуется std::make_format_args).

Параметры

stream - поток вывода файла для записи
fmt - объект, представляющий строку форматирования. Строка форматирования состоит из
  • обычных символов (кроме { и }), которые копируются в выходной поток без изменений,
  • последовательностей для экранирования {{ и }}, которые заменяются на { и } соответственно в выходном потоке, и
  • полей замены.

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

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

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

format-spec - спецификация форматирования, определённая специализацией std::formatter для соответствующего аргумента.
  • Для базовых типов и стандартных типов строк спецификация форматирования интерпретируется как стандартная спецификация форматирования.
  • Для типов chrono спецификация форматирования интерпретируется как спецификация форматирования chrono.
  • Для типов диапазонов спецификация форматирования интерпретируется как спецификация форматирования диапазонов.
  • Для std::pair и std::tuple, спецификация форматирования интерпретируется как спецификация форматирования кортежей.
  • Для std::thread::id и std::stacktrace_entry, см. спецификацию форматирования идентификатора потока и спецификацию форматирования записи стека вызовов.
  • Для std::basic_stacktrace, спецификация форматирования не допускается.
(с C++23)
  • Для других форматируемых типов спецификация форматирования определяется пользовательскими formatter специализациями.
args... - аргументы для форматирования

Возвращаемое значение

(ничего)

Исключения

  • std::bad_alloc при ошибке выделения памяти.
  • std::system_error, если запись в поток завершилась ошибкой.
  • Перебрасывает любое исключение, брошенное использованными форматерами, например std::format_error.

Примечания

Макросы проверки функций Значение Std Функция
__cpp_lib_print 202207L (C++23) Форматированный вывод
__cpp_lib_format 202207L (C++23) Вызов std::basic_format_string

Пример

#include <cstdio>
#include <filesystem>
#include <print>
 
int main()
{
    std::print("{0} {2}{1}!\n", "Hello", 23, "C++"); // overload (2)
 
    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 (1)
        std::fclose(stream);
    }
}

Вывод:

Hello C++23!

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/io/print

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API