Namespaces
Variants

std:: vprint_unicode (std::ostream)

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

Форматирует args в соответствии со строкой формата fmt и записывает результат в выходной поток os . Вебёт себя как FormattedOutputFunction для os , за исключением некоторых деталей обработки ошибок, которые отличаются .

Выполняет следующие операции в указанном порядке:

  1. Сначала функция создает и проверяет sentry объект.
  2. Инициализирует автоматическую переменную как будто бы std:: string out = std:: vformat ( os. getloc ( ) , fmt, args ) ; .
  3. Записывает out в os :
  • Если os ссылается на терминал, способный отображать Unicode только через нативный Unicode API , сбрасывает буфер os и записывает out в терминал с использованием нативного Unicode API.
  • В противном случае, вставляет последовательность символов [ out. begin ( ) , out. end ( ) ) в os .

Если запись в терминал или вставка в os завершается неудачей, вызывается os. setstate ( std:: ios_base :: badbit ) .

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

(since C++26)

Если out содержит некорректные Unicode кодовые единицы при использовании нативного Unicode API, поведение не определено.

Содержание

Параметры

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

Примечания

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

Макрос тестирования возможностей Значение Стандарт Возможность
__cpp_lib_print 202207L (C++23) Форматированный вывод
__cpp_lib_format 202207L (C++23) Предоставление std::basic_format_string

Пример

Отчеты о дефектах

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

DR Applied to Behavior as published Correct behavior
LWG 4044 C++23 нативный Unicode API всегда использовался, если
терминал, на который ссылается os может отображать Unicode
используется только если терминал может использовать
только нативный Unicode API для отображения Unicode

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

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

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

1. Unicode — Википедия
2. The Unicode Standard Version 14.0 — Core Specification