std::vprint_unicode(std::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
- Zuerst konstruiert und prüft die Funktion das sentry-Objekt.
- Initialisiert eine automatische Variable, als ob durch std::string out = std::vformat(os.getloc(), fmt, args);.
- 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 | - |
Jedes Ersetzungsfeld hat das folgende Format:
1) Ersetzungsfeld ohne Formatangabe
2) Ersetzungsfeld mit Formatangabe
| ||||||||||||||||||||||||||||||||||||||||||||||
| 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
| Dieser Abschnitt ist unvollständig Grund: kein 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) | |
| (C++23) |
gibt die formatierten Darstellung der Argumente aus (Funktionstemplate) |
| fügt Zeichendaten ein oder fügt in einen rvalue-Stream ein (function template) | |
| druckt auf Unicode-fähige stdout oder einen Dateistream unter Verwendung der typ-erased Argumentdarstellung (Funktion) | |
| (C++20) |
speichert die formatierte Darstellung der Argumente in einem neuen String (Funktionstemplate) |
[bearbeiten] Externe Links
| 1. | Unicode — Wikipedia |
| 2. | The Unicode Standard Version 14.0 — Core Specification |