Spec-Zone.ru › C++

vprint_unicode(std::ostream)

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

Ведёт себя как FormattedOutputFunction (за исключением некоторых деталей обработки ошибок отличаются):

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

Параметры

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

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

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

Идентификаторы-аргументов (arg-id) в строке формата должны быть все присутствующими или все отсутствующими. Смешивание ручного и автоматического индексирования является ошибкой.

спецификация-формата - спецификация формата, определённая специализацией std::formatter для соответствующего аргумента.
  • Для базовых типов и стандартных типов строк спецификация формата интерпретируется как стандартная спецификация формата.
  • Для типов chrono спецификация формата интерпретируется как спецификация формата chrono.
  • Для типов диапазонов спецификация формата интерпретируется как спецификация формата диапазона.
  • Для std::pair и std::tuple, спецификация формата интерпретируется как спецификация формата кортежа.
  • Для std::thread::id и std::stacktrace_entry, см. спецификацию формата идентификатора потока и спецификацию формата записи стека вызовов.
  • Для std::basic_stacktrace, спецификатор формата не допускается.
(с C++23)
  • Для других форматируемых типов спецификация формата определяется специализациями formatter .
args - аргументы для форматирования

Значение результата

(нет)

Исключение

  • std::bad_alloc при ошибке выделения памяти.
  • Передаёт любые исключения, брошенные любым форматировщиком formatter, например, std::format_error, не обращая внимания на значение os.exceptions() и не включая ios_base::badbit в состояние ошибки os.
  • Может бросить исключение ios_base::failure, вызванное os.setstate(ios_base::badbit), которое вызывается, если вставка в os терпит неудачу.

Примечания

Если для вызова родного API Unicode требуется транскодирование, недействительные кодовые единицы заменяются на U+FFFD ЗАМЕЩАЮЩИЙ СИМВОЛ (см. "The Unicode Standard Version 14.0 - Core Specification", Глава 3.9).

Макро-тест на наличие функции Значение Std Функция
__cpp_lib_print 202207L (C++23) Форматированный вывод
__cpp_lib_format 202207L (C++23) Экспонирование std::basic_format_string

Пример

См. также

vprint_nonunicode(std::ostream)
(C++23)
выводит символьные данные с использованием представления аргументов
(функция)
print(std::ostream)
(C++23)
выводит форматированное представление аргументов
(функция-шаблон)
operator<<(std::basic_ostream)
вставляет символьные данные или вставляет в поток-ссылку на rvalue
(функция-шаблон)
vprint_unicode
(C++23)
выводит в Unicode-совместимый stdout или в поток файла, используя представление аргументов
(функция)
format
(C++20)
сохраняет отформатированное представление аргументов в новой строке
(функция-шаблон)

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

1. Unicode
2. The Unicode Standard Version 14.0 - Core Specification

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/io/basic_ostream/vprint_unicode

Spec-Zone.ru

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