std::vprint_unicode, std::vprint_unicode_buffered
| Definiert in Header <print> |
||
| void vprint_unicode( std::FILE* stream, std::string_view fmt, std::format_args args ); |
(1) | (seit C++23) |
| void vprint_unicode_buffered( std::FILE* stream, std::string_view fmt, std::format_args args ); |
(2) | (seit C++23) |
| void vprint_unicode_buffered( std::string_view fmt, std::format_args args ); |
(3) | (seit C++23) |
Formatiert args gemäß der Formatzeichenkette fmt und schreibt das Ergebnis in den Ausgabestrom.
- Sperrt stream.
- Sei out die Zeichenrepräsentation der Formatierungsargumente, die von args gemäß den Spezifikationen in fmt formatiert werden.
- Schreibt out nach stream.
- Wenn stream auf ein Terminal verweist, das Unicode nur über eine native Unicode-API anzeigen kann, wird stream geleert und out über die native Unicode-API an das Terminal geschrieben.
- Andernfalls wird das unveränderte out in den stream geschrieben.
- stream ist kein gültiger Zeiger auf einen C-Ausgabestrom.
- out enthält ungültige Unicode- Code Units, wenn die native Unicode-API verwendet wird.
std::vprint_unicode(stream, "{}", std::make_format_args(out));.
|
Nachdem Zeichen in den Ausgabestrom geschrieben wurden, wird ein beobachtbarer Kontrollpunkt eingerichtet. |
(seit C++26) |
Inhalt |
[bearbeiten] Parameter
| stream | - | Ausgabestream, in den geschrieben werden soll | ||||||||||||||||||||||||||||||||||||||||||||||
| 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.
- std::system_error, wenn das Schreiben in den Stream fehlschlägt.
- Propagiert jede Ausnahme, die von verwendeten Formatierern ausgelöst wird, z. B. std::format_error.
[bearbeiten] Hinweise
Der C++-Standard ermutigt die Implementierer, eine Diagnosemeldung auszugeben, wenn out ungültige Unicode-Codepunkte enthält.
Auf POSIX wird die Ausgabe an ein Terminal mit den üblichen Standard-I/O-Funktionen vorgenommen, sodass kein Grund besteht, ein Terminal anders zu behandeln als jeden anderen Dateistrom.
Unter Windows bezieht sich der Strom auf ein Terminal, wenn GetConsoleMode(_get_osfhandle(_fileno(stream))) einen von Null verschiedenen Wert zurückgibt (siehe Windows-Dokumentation für GetConsoleMode, _get_osfhandle und _fileno). Die native Unicode-API unter Windows ist WriteConsoleW.
Wenn die Verwendung der nativen Unicode-API eine Transkodierung erfordert, werden die ungültigen Code-Einheiten durch das 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 |
202403L |
(C++26) (DR23) |
Ungepufferte formatierte Ausgabe | |
202406L |
(C++26) (DR23) |
Aktivierung ungepufferter formatierter Ausgabe für mehr formatierbare Typen | |
__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 stream verweist, Unicode anzeigen kann |
nur verwendet, wenn das Terminal nur verwenden kann die native Unicode-API zur Anzeige von Unicode |
| P3107R5 | C++23 | Druckoperationen waren immer gepuffert | bietet ungepufferte Druckoperationen |
| P3235R3 | C++23 | die Namen der hinzugefügten Funktionen von P3107R5 waren irreführend |
die Funktionsnamen geändert wurden |
[bearbeiten] Siehe auch
| druckt auf stdout oder einen Dateistream unter Verwendung der typ-erased Argumentdarstellung (Funktion) | |
| (C++23) |
führt Unicode-fähige Ausgabe unter Verwendung einer typ-erased Argumentdarstellung durch (type-erased) (function) |
| (C++23) |
druckt nach stdout oder einem Dateistream unter Verwendung der formatierten Darstellung der Argumente (Funktionstemplate) |
| (C++20) |
speichert die formatierte Darstellung der Argumente in einem neuen String (Funktionstemplate) |
[bearbeiten] Externe Links
| 1. | Unicode |
| 2. | Der Unicode-Standard Version 14.0 - Kernspezifikation |