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 | - | объект, представляющий строку формата. Строка формата состоит из
Каждое поле подстановки имеет следующий формат:
|
||||||||||||||||
| 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.
См. также
|
(C++23) | выводит форматированное представление аргументов с добавлением '\n' (шаблон функции) |
|
(C++23) | выводит в stdout или файловый поток форматированное представление аргументов, используя форматирование (шаблон функции) |
|
(C++20) | сохраняет форматированное представление аргументов в новой строке (шаблон функции) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/basic_ostream/print