Namespaces
Variants

std:: vprint_unicode, std:: vprint_unicode_buffered

From cppreference.net
< cpp ‎ | io
Print functions
Print functions
(C++23)
(C++23)
vprint_unicode vprint_unicode_buffered
(C++23) (C++23)
Definido en el encabezado <print>
void vprint_unicode ( std:: FILE * stream,
std:: string_view fmt, std:: format_args args ) ;
(1) (desde C++23)
void vprint_unicode_buffered ( std:: FILE * stream,
std:: string_view fmt, std:: format_args args ) ;
(2) (desde C++23)
void vprint_unicode_buffered ( std:: string_view fmt, std:: format_args args ) ;
(3) (desde C++23)

Formatea args de acuerdo con la cadena de formato fmt , y escribe el resultado al flujo de salida.

1) Realiza las siguientes operaciones en orden:
  1. Bloquea stream .
  2. Sea out la representación en caracteres de los argumentos de formato proporcionados por args formateados según las especificaciones dadas en fmt .
  3. Escribe out en stream :
  • Si stream se refiere a una terminal que solo es capaz de mostrar Unicode mediante una API nativa de Unicode , vacía el búfer de stream y escribe out en la terminal usando la API nativa de Unicode.
  • De lo contrario, escribe out sin modificar en el stream .
Desbloquea incondicionalmente stream al salir de la función.
Si se satisface cualquiera de las siguientes condiciones, el comportamiento es indefinido:
  • stream no es un puntero válido a un flujo de salida C.
  • out contiene unidades de código Unicode inválidas code units cuando se utiliza la API nativa de Unicode.
2) Equivalente a std:: string out = std:: vformat ( fmt, args ) ;
std :: vprint_unicode ( stream, "{}" , std:: make_format_args ( out ) ) ;
.
3) Equivalente a std :: vprint_unicode_buffered ( stdout , fmt, args ) .


Después de escribir caracteres en el flujo de salida, establece un punto de control observable .

(since C++26)

Contenidos

Parámetros

stream - flujo de archivo de salida donde escribir
fmt - un objeto que representa la cadena de formato. La cadena de formato consiste en
  • caracteres ordinarios (excepto { y } ), que se copian sin cambios a la salida,
  • secuencias de escape { { y } } , que se reemplazan con { y } respectivamente en la salida, y
  • campos de reemplazo.

Cada campo de reemplazo tiene el siguiente formato:

{ arg-id (opcional) } (1)
{ arg-id (opcional) : format-spec } (2)
1) campo de reemplazo sin especificación de formato
2) campo de reemplazo con especificación de formato
arg-id - especifica el índice del argumento en args cuyo valor se usará para el formato; si se omite, los argumentos se usan en orden.

Los arg-id s en una cadena de formato deben estar todos presentes o todos omitidos. Mezclar indexación manual y automática es un error.

format-spec - la especificación de formato definida por la especialización de std::formatter para el argumento correspondiente. No puede comenzar con } .

(since C++23)
(since C++26)
  • Para otros tipos formateables, la especificación de formato está determinada por especializaciones de formatter definidas por el usuario.
args - argumentos a formatear

Excepciones

Notas

El estándar de C++ alienta a los implementadores a producir un mensaje de diagnóstico si out contiene unidades de código Unicode inválidas.

En POSIX, la escritura a una terminal se realiza utilizando las funciones estándar de E/S habituales, por lo que no es necesario tratar una terminal de manera diferente a cualquier otro flujo de archivos.

En Windows, el flujo se refiere a una terminal si GetConsoleMode ( _get_osfhandle ( _fileno ( stream ) ) ) devuelve un valor distinto de cero (consulte la documentación de Windows para GetConsoleMode , _get_osfhandle , y _fileno ). La API nativa de Unicode en Windows es WriteConsoleW .

Si invocar la API nativa Unicode requiere transcodificación, las unidades de código inválidas se sustituyen con U+FFFD CARÁCTER DE REEMPLAZO (ver "The Unicode Standard - Core Specification", Capítulo 3.9 ).

Macro de prueba de características Valor Std Característica
__cpp_lib_print 202207L (C++23) Salida formateada
202403L (C++26)
(DR23)
Salida formateada sin búfer
202406L (C++26)
(DR23)
Habilitar salida formateada sin búfer para más tipos formateables
__cpp_lib_format 202207L (C++23) Exponer std::basic_format_string

Ejemplo

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 4044 C++23 la API nativa Unicode siempre se utilizaba si la
terminal referida por stream puede mostrar Unicode
solo se utiliza si la terminal solo puede usar
la API nativa Unicode para mostrar Unicode
P3107R5 C++23 las operaciones de impresión siempre estaban almacenadas en búfer proporciona operaciones de impresión sin búfer
P3235R3 C++23 los nombres de las funciones añadidas
por P3107R5 eran engañosos
cambió los nombres de las funciones

Véase también

imprime en stdout o un flujo de archivo usando representación de argumentos con borrado de tipo
(función)
realiza salida compatible con Unicode usando representación de argumentos con borrado de tipo
(función)
(C++23)
imprime en stdout o un flujo de archivo usando representación formateada de los argumentos
(plantilla de función)
(C++20)
almacena la representación formateada de los argumentos en una nueva cadena
(plantilla de función)

Enlaces externos

1. Unicode
2. El Estándar Unicode Versión 14.0 - Especificación Principal