Namensräume
Varianten
Aktionen

std::vprint_unicode(std::ostream)

Von cppreference.com
< cpp‎ | io‎ | basic ostream
 
 
 
 
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 Formatierungszeichenkette fmt und schreibt das Ergebnis in den Ausgabestrom os. Verhält sich als 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, als ob durch std::string out = std::vformat(os.getloc(), fmt, args);.
  3. Schreibt out nach os.
  • Wenn os auf ein Terminal verweist, das nur über eine native Unicode-API Unicode anzeigen kann, wird os geleert und out mit der nativen Unicode-API an das Terminal geschrieben.
  • Andernfalls wird die Zeichensequenz [out.begin()out.end()) in os eingefügt.

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

Nachdem Zeichen in os geschrieben wurden, wird ein beobachtbarer Prüfpunkt (observable checkpoint) eingerichtet.

(seit C++26)

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

Inhalt

[bearbeiten] Parameter

os - Ausgabestream, in den Daten eingefügt werden sollen
fmt - ein Objekt, das den Formatstring repräsentiert. Der Formatstring besteht aus
  • regulären Zeichen (außer { und }), die unverändert in die Ausgabe kopiert werden,
  • Escape-Sequenzen {{ und }}, die in der Ausgabe durch { und } ersetzt werden, und
  • Ersetzungsfeldern.

Jedes Ersetzungsfeld hat das folgende 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 werden soll; wenn er weggelassen wird, werden die Argumente in der Reihenfolge verwendet.

Die `arg-id`s in einem Formatstring müssen entweder alle vorhanden sein oder alle weggelassen werden. Das Mischen von manueller und automatischer Indizierung ist ein Fehler.

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

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

[bearbeiten] Ausnahmen

  • std::bad_alloc bei Zuweisungsfehler.
  • Leitet jede Ausnahme, die von einem beliebigen Formatter ausgelöst wird, z. B. std::format_error, ohne Berücksichtigung des Werts von os.exceptions() und ohne ios_base::badbit im Fehlerzustand von os zu aktivieren, weiter.
  • Kann ios_base::failure auslösen, die durch os.setstate(ios_base::badbit) verursacht wird, was aufgerufen wird, wenn ein Einfügen in os fehlschlägt.

[bearbeiten] Hinweise

Wenn das Aufrufen der nativen Unicode-API eine Transkodierung erfordert, werden die ungültigen Code Units durch U+FFFD REPLACEMENT CHARACTER ersetzt (siehe "The Unicode Standard - Core Specification", Kapitel 3.9).

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

[bearbeiten] Beispiel

[bearbeiten] Fehlerberichte

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

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
LWG 4044 C++23 die native Unicode-API wurde immer verwendet, wenn das
Terminal, auf das sich os bezieht, Unicode anzeigen kann
nur verwendet, wenn das Terminal nur verwenden kann
die native Unicode-API, um Unicode anzuzeigen

[bearbeiten] Siehe auch

gibt Zeichendaten aus unter Verwendung einer typ-erased Argumentdarstellung (type-erased)
(function) [bearbeiten]
gibt die formatierten Darstellung der Argumente aus
(Funktionstemplate) [bearbeiten]
fügt Zeichendaten ein oder fügt in einen rvalue-Stream ein
(function template) [bearbeiten]
druckt auf Unicode-fähige stdout oder einen Dateistream unter Verwendung der typ-erased Argumentdarstellung
(Funktion) [bearbeiten]
(C++20)
speichert die formatierte Darstellung der Argumente in einem neuen String
(Funktionstemplate) [bearbeiten]

[bearbeiten] Externe Links

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