Namespaces
Variants

std:: vprint_unicode (std::ostream)

From cppreference.net
Definido en el encabezado <ostream>
void vprint_unicode ( std:: ostream & os,
std:: string_view fmt, std:: format_args args ) ;
(desde C++23)

Formatea args de acuerdo con la cadena de formato fmt , y escribe el resultado al flujo de salida os . Se comporta como FormattedOutputFunction de os , excepto que algunos detalles del reporte de errores difieren .

Realiza las siguientes operaciones en orden:

  1. Primero, la función construye y verifica el sentry object.
  2. Inicializa una variable automática como si fuera por std:: string out = std:: vformat ( os. getloc ( ) , fmt, args ) ; .
  3. Escribe out a os :
  • Si os se refiere a una terminal que solo es capaz de mostrar Unicode mediante una API nativa de Unicode , vacía el búfer de os y escribe out en la terminal usando la API nativa de Unicode.
  • De lo contrario, inserta la secuencia de caracteres [ out. begin ( ) , out. end ( ) ) en os .

Si la escritura en la terminal o la inserción en os falla, llama a os. setstate ( std:: ios_base :: badbit ) .

Después de escribir caracteres en os , establece un punto de control observable .

(since C++26)

Si out contiene unidades de código Unicode inválidas cuando se utiliza la API nativa de Unicode, el comportamiento es indefinido.

Contenidos

Parámetros

os - flujo de salida donde insertar los datos
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 } .

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

Excepciones

Notas

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
__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 Unicode nativa siempre se utilizaba si la
terminal referida por os puede mostrar Unicode
solo se utiliza si la terminal solo puede usar
la API Unicode nativa para mostrar Unicode

Véase también

genera salida de datos de caracteres usando representación de argumentos con borrado de tipo
(función)
genera representación formateada de los argumentos
(plantilla de función)
inserta datos de caracteres o inserta en flujo de valor derecho
(plantilla de función)
imprime en stdout compatible con Unicode o en un flujo de archivo usando representación de argumentos con borrado de tipo
(función)
(C++20)
almacena representación formateada de los argumentos en una nueva cadena
(plantilla de función)

Enlaces externos

1. Unicode — Wikipedia
2. The Unicode Standard Version 14.0 — Core Specification