Spec-Zone.ru › C++

std::vprint_nonunicode, std::vprint_nonunicode_buffered

Определено в заголовочном файле <print>
void vprint_nonunicode( std::FILE* stream,
                        std::string_view fmt, std::format_args args );
(1) (начиная с C++23)
void vprint_nonunicode_buffered
    ( std::FILE* stream, std::string_view fmt, std::format_args args );
(2) (начиная с C++23)
void vprint_nonunicode_buffered
    ( std::string_view fmt, std::format_args args );
(3) (начиная с C++23)

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

1) Удерживая блокировку на stream, записывает символьное представление аргументов форматирования, переданных посредством args и отформатированных согласно спецификациям, заданным в fmt, в stream.
Если stream не является допустимым указателем на выходной поток C, поведение не определено.
2) Эквивалентно
std::string out = std::vformat(fmt, args);
std::vprint_nonunicode(stream, "{}", std::make_format_args(out));
3) Эквивалентно std::vprint_nonunicode_buffered(stdout, fmt, args).

После записи символов в выходной поток устанавливает наблюдаемую контрольную точку.

(начиная с C++26)

Параметры

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

Исключения

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

Примечания

Макрос проверки поддержки возможностей Значение Стандарт Возможность
__cpp_lib_print 202207L (C++23) Форматированный вывод
202403L (C++26)
(DR23)
Небуферизованный форматированный вывод
202406L (C++26)
(DR23)
Поддержка небуферизованного форматированного вывода для большего числа форматируемых типов
__cpp_lib_format 202207L (C++23) Предоставление std::basic_format_string

Пример

Отчёты об ошибках

Следующие отчёты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применяется к Поведение согласно опубликованной версии Правильное поведение
P3107R5 C++23 операции вывода всегда использовали буферизацию предоставляет небуферизованные операции вывода
P3235R3 C++23 названия функций, добавленных
в P3107R5, вводили в заблуждение
изменены названия функций

См. также

vprint_unicodevprint_unicode_buffered
(C++23)
выводит данные в stdout с поддержкой Unicode или файловый поток, используя стёртое по типу представление аргументов
(функция)
vprint_nonunicode(std::ostream)
(C++23)
выводит символьные данные, используя стёртое по типу представление аргументов
(функция)
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/vprint_nonunicode

Spec-Zone.ru

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