Namespaces
Variants

std:: vprint_unicode (std::ostream)

From cppreference.net
Definiert in Header <ostream>
void vprint_unicode ( std:: ostream & os,
std:: string_view fmt, std:: format_args args ) ;
(seit C++23)

Formatiert args gemäß der Formatzeichenkette fmt und schreibt das Ergebnis in den Ausgabestrom os . Verhält sich wie eine FormattedOutputFunction von os , mit der Ausnahme, dass einige Details der Fehlerberichterstattung abweichen .

Führt die folgenden Operationen in der angegebenen Reihenfolge aus:

  1. Zuerst konstruiert und prüft die Funktion das sentry -Objekt.
  2. Initialisiert eine automatische Variable wie durch std:: string out = std:: vformat ( os. getloc ( ) , fmt, args ) ; .
  3. Schreibt out nach os :
  • Falls os auf ein Terminal verweist, das Unicode nur über eine native Unicode-API anzeigen kann, leert es os und schreibt out unter Verwendung der nativen Unicode-API auf das Terminal.
  • Andernfalls fügt es die Zeichenfolge [ out. begin ( ) , out. end ( ) ) in os ein.

Wenn das Schreiben in das Terminal oder das Einfügen in os fehlschlägt, ruft es os. setstate ( std:: ios_base :: badbit ) auf.

Nachdem Zeichen in os geschrieben wurden, wird ein beobachtbarer Kontrollpunkt etabliert.

(since C++26)

Wenn out ungültige Unicode- Codeeinheiten enthält, wenn die native Unicode-API verwendet wird, ist das Verhalten undefiniert.

Inhaltsverzeichnis

Parameter

os - Ausgabestrom, in den Daten eingefügt werden
fmt - ein Objekt, das die Formatzeichenkette repräsentiert. Die Formatzeichenkette besteht aus
  • gewöhnlichen Zeichen (außer { und } ), die unverändert in die Ausgabe kopiert werden,
  • Escape-Sequenzen { { und } } , die in der Ausgabe durch { bzw. } ersetzt werden, und
  • Ersetzungsfeldern.

Jedes Ersetzungsfeld hat folgendes Format:

{ arg-id (optional) } (1)
{ arg-id (optional) : format-spec } (2)
1) Ersetzungsfeld ohne Formatangabe
2) Ersetzungsfeld mit Formatangabe
arg-id - gibt den Index des Arguments in args an, dessen Wert zur Formatierung verwendet wird; falls ausgelassen, werden die Argumente in Reihenfolge verwendet.

Die arg-id s in einer Formatzeichenkette müssen entweder alle angegeben oder alle ausgelassen werden. Das Vermischen von manueller und automatischer Indizierung ist ein Fehler.

format-spec - die Formatangabe, definiert durch die std::formatter -Spezialisierung für das entsprechende Argument. Darf nicht mit } beginnen.

(since C++23)
(since C++26)
  • Für andere formatierbare Typen wird die Formatangabe durch benutzerdefinierte formatter -Spezialisierungen bestimmt.
args - zu formatierende Argumente

Ausnahmen

Hinweise

Wenn der Aufruf der nativen Unicode-API Transkodierung erfordert, werden ungültige Codeeinheiten durch den U+FFFD REPLACEMENT CHARACTER ersetzt (siehe "The Unicode Standard - Core Specification", Kapitel 3.9 ).

Feature-Test Makro Wert Std Funktion
__cpp_lib_print 202207L (C++23) Formatierte Ausgabe
__cpp_lib_format 202207L (C++23) Verfügbarmachen von std::basic_format_string

Beispiel

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 4044 C++23 die native Unicode-API wurde immer verwendet, wenn
das Terminal, auf das os verweist, Unicode anzeigen kann
nur verwendet, wenn das Terminal nur
die native Unicode-API zur Unicode-Anzeige nutzen kann

Siehe auch

gibt Zeichendaten unter Verwendung typlöschter Argumentdarstellung aus
(Funktion)
gibt formatierte Darstellung der Argumente aus
(Funktionsschablone)
fügt Zeichendaten ein oder fügt in Rvalue-Stream ein
(Funktionsschablone)
druckt zu Unicode-fähigem stdout oder einem Dateistream unter Verwendung typlöschter Argumentdarstellung
(Funktion)
(C++20)
speichert formatierte Darstellung der Argumente in einem neuen String
(Funktionsschablone)

Externe Links

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