Spec-Zone.ru › C++

std::print(std::ostream)

Определён в заголовочном файле <ostream>
template< class... Args >
void print( std::ostream& os, std::format_string<Args...> fmt, Args&&... args );
(начиная с C++23)

Форматирует args в соответствии со строкой формата fmt и вставляет результат в поток os.

Если кодировка обычных литералов — UTF-8, эквивалентно:

  • std::vprint_unicode(os,fmt.get(),std::make_format_args(args...));. В противном случае
  • std::vprint_nonunicode(os,fmt.get(),std::make_format_args(args...));.

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

Параметры

os - выходной поток для вставки данных
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)
  • Для std::filesystem::path см. спецификацию формата пути.
(начиная с C++26)
  • Для других форматируемых типов спецификация формата определяется пользовательскими специализациями formatter.
args... - аргументы для форматирования

Исключения

  • std::bad_alloc при нехватке памяти.
  • Передаёт любое исключение, выброшенное любым форматтером, например std::format_error, независимо от значения os.exceptions() и не устанавливая ios_base::badbit в состоянии ошибки os.
  • Может выбросить ios_base::failure, вызванное os.setstate(ios_base::badbit), которое вызывается в случае сбоя вставки в os.

Примечания

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

Пример

#include <array>
#include <cctype>
#include <cstdio>
#include <format>
#include <numbers>
#include <ranges>
#include <sstream>

int main()
{
    std::array<char, 24> buf;
    std::format_to(buf.begin(), "{:.15f}", std::numbers::sqrt2);

    unsigned num{}, sum{};

    for (auto n : buf
                | std::views::filter(isdigit)
                | std::views::transform([](char x) { return x - '0'; })
                | std::views::take_while([&sum](char) { return sum < 42; }))
        sum += n, ++num;

    std::stringstream stream;

#ifdef __cpp_lib_print
    std::print(stream,
#else
    stream << std::format(
#endif
        "√2 \N{ALMOST EQUAL TO} {0}.\n"
        "The sum of its first {1} digits is {2}.",
        std::numbers::sqrt2, num, sum
    );

    std::puts(stream.str().data());
}

Вывод:

√2 ≈ 1.4142135623730951.
The sum of its first 13 digits is 42.

См. также

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

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

Spec-Zone.ru

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