Namespaces
Variants

std:: vprint_unicode, std:: vprint_unicode_buffered

From cppreference.net
< cpp ‎ | io
Print functions
Print functions
(C++23)
(C++23)
vprint_unicode vprint_unicode_buffered
(C++23) (C++23)
Определено в заголовочном файле <print>
void vprint_unicode ( std:: FILE * stream,
std:: string_view fmt, std:: format_args args ) ;
(1) (начиная с C++23)
void vprint_unicode_buffered ( std:: FILE * stream,
std:: string_view fmt, std:: format_args args ) ;
(2) (начиная с C++23)
void vprint_unicode_buffered ( std:: string_view fmt, std:: format_args args ) ;
(3) (начиная с C++23)

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

1) Выполняет следующие операции по порядку:
  1. Блокирует stream .
  2. Пусть out обозначает символьное представление аргументов форматирования, предоставленных args и отформатированных согласно спецификациям, заданным в fmt .
  3. Записывает out в stream :
  • Если stream ссылается на терминал, способный отображать Unicode только через нативный Unicode API , сбрасывает буфер stream и записывает out в терминал, используя нативный Unicode API.
  • В противном случае, записывает неизмененный out в stream .
Безусловно разблокирует stream при выходе из функции.
Если выполняется любое из следующих условий, поведение не определено:
  • stream не является корректным указателем на выходной C-поток.
  • out содержит некорректные Unicode кодовые единицы при использовании нативного Unicode API.
2) Эквивалентно std:: string out = std:: vformat ( fmt, args ) ;
std :: vprint_unicode ( stream, "{}" , std:: make_format_args ( out ) ) ;
.
3) Эквивалентно std :: vprint_unicode_buffered ( stdout , fmt, args ) .


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

(since C++26)

Содержание

Параметры

stream - выходной файловый поток для записи
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 - аргументы для форматирования

Исключения

Примечания

Стандарт C++ рекомендует разработчикам выдавать диагностическое сообщение, если out содержит недопустимые юникодные кодовые единицы.

В POSIX запись в терминал выполняется с использованием стандартных функций ввода-вывода, поэтому нет необходимости обрабатывать терминал иначе, чем любой другой файловый поток.

В Windows поток считается терминалом, если GetConsoleMode ( _get_osfhandle ( _fileno ( stream ) ) ) возвращает ненулевое значение (см. документацию Windows для GetConsoleMode , _get_osfhandle и _fileno ). Нативный Unicode API в Windows — WriteConsoleW .

Если вызов нативного Unicode API требует перекодировки, недопустимые кодовые единицы заменяются на U+FFFD REPLACEMENT CHARACTER (см. "The Unicode Standard - Core Specification", Chapter 3.9 ).

Макрос тестирования возможностей Значение Стандарт Возможность
__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 Applied to Behavior as published Correct behavior
LWG 4044 C++23 the native Unicode API was always used if the
terminal referred to by stream can display Unicode
only used if the terminal can only use
the native Unicode API to display Unicode
P3107R5 C++23 printing operations were always buffered provides unbuffered printing operations
P3235R3 C++23 the names of the functions added
by P3107R5 were misleading
changed the function names

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

выводит в stdout или файловый поток с использованием type-erased представления аргументов
(функция)
выполняет вывод с поддержкой Unicode с использованием type-erased представления аргументов
(функция)
(C++23)
выводит в stdout или файловый поток с использованием форматированного представления аргументов
(шаблон функции)
(C++20)
сохраняет форматированное представление аргументов в новой строке
(шаблон функции)

Внешние ссылки

1. Юникод
2. Спецификация Unicode Standard Версия 14.0 - Основная спецификация