Spec-Zone.ru › C++

std::vprint_unicode

Определено в заголовке <print>
void vprint_unicode( std::FILE* stream,
                     std::string_view fmt, std::format_args args );
(1) (с C++23)
void vprint_unicode( std::string_view fmt, std::format_args args );
(2) (с C++23)

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

Пусть out — временная string, полученная путём форматирования аргументов в args с помощью std::vformat(fmt, args).

1) Если stream ссылается на терминал, способный отображать Unicode, записывает out в этот терминал, используя родной API Unicode. В противном случае записывает неизменённое out в stream.
2) то же, что (1), когда stream равно стандартному потоку вывода C stdout, т.е. std::vprint_unicode(stdout, fmt, args);

Поведение не определено, если:

  • stream не является корректным указателем на поток C;
  • out содержит некорректные Unicode кодовые единицы.

Параметры

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)
  • Для других форматируемых типов спецификация формата определяется пользовательскими formatter специализациями.
args - аргументы для форматирования

Возвращаемое значение

(нет)

Исключения

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

Примечания

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

В POSIX, поток ссылается на терминал, если выражение isatty(fileno(stream)) != 0 истинно (см. документацию POSIX по isatty и fileno).

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

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

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

Пример

См. также

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

Spec-Zone.ru

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