std:: vprint_unicode, std:: vprint_unicode_buffered
|
Определено в заголовочном файле
<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 и записывает результат в выходной поток.
- Блокирует stream .
- Пусть out обозначает символьное представление аргументов форматирования, предоставленных args и отформатированных согласно спецификациям, заданным в fmt .
- Записывает out в stream :
-
- Если stream ссылается на терминал, способный отображать Unicode только через нативный Unicode API , сбрасывает буфер stream и записывает out в терминал, используя нативный Unicode API.
- В противном случае, записывает неизмененный out в stream .
- stream не является корректным указателем на выходной C-поток.
- out содержит некорректные Unicode кодовые единицы при использовании нативного Unicode API.
std :: vprint_unicode ( stream, "{}" , std:: make_format_args ( out ) ) ; .
|
После записи символов в выходной поток устанавливает наблюдаемую точку контроля . |
(since C++26) |
Содержание |
Параметры
| stream | - | выходной файловый поток для записи | ||||||||||||||||||||||||||||||||||||||||||||||
| fmt | - |
Каждое поле замены имеет следующий формат:
1)
поле замены без спецификации формата
2)
поле замены со спецификацией формата
|
||||||||||||||||||||||||||||||||||||||||||||||
| args | - | аргументы для форматирования | ||||||||||||||||||||||||||||||||||||||||||||||
Исключения
- std::bad_alloc при ошибке выделения памяти.
- std::system_error , если запись в поток завершается неудачей.
- Пробрасывает любое исключение, выброшенное используемыми formatters , например std::format_error .
Примечания
Стандарт 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
представления аргументов
(функция) |
|
|
(C++23)
|
выполняет вывод с поддержкой Unicode с использованием
type-erased
представления аргументов
(функция) |
|
(C++23)
|
выводит в
stdout
или файловый поток с использованием
форматированного
представления аргументов
(шаблон функции) |
|
(C++20)
|
сохраняет форматированное представление аргументов в новой строке
(шаблон функции) |
Внешние ссылки
| 1. | Юникод |
| 2. | Спецификация Unicode Standard Версия 14.0 - Основная спецификация |