std::vprint_unicode(std::ostream)
Определён в заголовочном файле <ostream> | ||
|---|---|---|
void vprint_unicode( std::ostream& os,
std::string_view fmt, std::format_args args );
| (начиная с C++23) |
Форматирует args в соответствии со строкой формата fmt и записывает результат в выходной поток os. Ведёт себя как функция форматированного вывода для os, за исключением того, что некоторые детали обработки ошибок отличаются.
Выполняет следующие операции по порядку:
- Сначала функция создаёт и проверяет объект sentry.
- Инициализирует автоматическую переменную, как если бы это выполнялось с помощью
std::string out = std::vformat(os.getloc(), fmt, args);. - Записывает
outвos:
- Если
osссылается на терминал, способный отображать Unicode только с помощью собственного API Unicode, сбрасываетosи записываетoutв терминал с помощью собственного API Unicode. - В противном случае вставляет последовательность символов
[out.begin(),out.end())вos.
Если запись в терминал или вставка в os завершается неудачей, вызывает os.setstate(std::ios_base::badbit).
| После записи символов в | (начиная с C++26) |
Если out содержит недопустимые единицы кода Unicode кодовые единицы при использовании собственного API Unicode, поведение не определено.
Параметры
| os | - | выходной поток, в который вставляются данные | ||||||||||||||||
| fmt | - | объект, представляющий строку формата. Строка формата состоит из
Каждое поле замены имеет следующий формат:
|
||||||||||||||||
| args | - | аргументы для форматирования |
Исключения
-
std::bad_allocпри ошибке выделения памяти. - Передаёт любое исключение, выброшенное любым форматтером, например
std::format_error, независимо от значенияos.exceptions()и не устанавливаяios_base::badbitв состоянии ошибкиos. - Может выбросить
ios_base::failure, вызванноеos.setstate(ios_base::badbit), которое вызывается, если вставка вosзавершается неудачей.
Примечания
Если для вызова собственного API Unicode требуется транскодирование, недопустимые единицы кода заменяются на U+FFFD REPLACEMENT CHARACTER (см. «Стандарт Unicode — основная спецификация», главу 3.9).
| Макрос проверки поддержки возможностей | Значение | Стандарт | Возможность |
|---|---|---|---|
__cpp_lib_print | 202207L | (C++23) | Форматированный вывод |
__cpp_lib_format | 202207L | (C++23) | Предоставление std::basic_format_string |
Пример
Отчёты об исправлениях
Следующие отчёты об исправлениях, меняющие поведение, были ретроактивно применены к ранее опубликованным стандартам C++.
| DR | Применение к | Опубликованное поведение | Правильное поведение |
|---|---|---|---|
| LWG 4044 | C++23 | собственный API Unicode всегда использовался, если терминал, на который ссылается os, может отображать Unicode | используется только в том случае, если терминал может отображать Unicode только с помощью собственного API Unicode |
См. также
|
(C++23) | выводит символьные данные, используя стираемое по типу представление аргументов (функция) |
|
(C++23) | выводит форматированное представление аргументов (шаблон функции) |
| вставляет символьные данные или выполняет вставку в поток-значение rvalue (шаблон функции) |
|
|
(C++23) | выводит данные в поддерживающий Unicode stdout или файловый поток, используя стираемое по типу представление аргументов (функция) |
|
(C++20) | сохраняет форматированное представление аргументов в новой строке (шаблон функции) |
Внешние ссылки
| 1. | Unicode — Википедия |
| 2. | Стандарт Unicode, версия 14.0 — основная спецификация |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/basic_ostream/vprint_unicode