Spec-Zone.ru › C++

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

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

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

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

спецификация-формата - спецификация формата, определенная специализацией 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::format_error, вне зависимости от значения os.exceptions() и без включения ios_base::badbit в состоянии ошибки os.
  • Может бросить ios_base::failure вызываемое os.setstate(ios_base::badbit), которое вызывается, если вставка в os завершится неудачно.

Примечания

Макрокоманда проверки наличия функции Значение Std Функция
__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{};
 
    auto v = buf
           | std::views::filter(isdigit)
           | std::views::transform([](char x) { return x - '0'; })
           | std::views::take_while([&sum](char) { return sum < 42; });
 
    for (auto n : v)
        sum += n, ++num;
 
    std::stringstream stream;
 
#ifdef __cpp_lib_print
    std::print(stream,
#else
    stream << std::format(
#endif
        "√2 = {}...\n"
        "The sum of its first {} digits is {}{}",
        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/w/cpp/io/basic_ostream/print

Spec-Zone.ru

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