Namespaces
Variants

std:: print (std::ostream)

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

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

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

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

Содержание

Параметры

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

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

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

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

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

(since C++23)
(since 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.

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

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