Namensräume
Varianten
Aktionen

std::vprint_unicode, std::vprint_unicode_buffered

Von cppreference.com
< cpp‎ | io
 
 
 
Druckfunktionen
Druckfunktionen
(C++23)
(C++23)
vprint_unicodevprint_unicode_buffered
(C++23)(C++23)
 
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.

1) Führt die folgenden Operationen in Reihenfolge aus:
  1. Sperrt stream.
  2. Sei out die Zeichenrepräsentation der Formatierungsargumente, die von args gemäß den Spezifikationen in fmt formatiert werden.
  3. 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.
Entsperrt stream bedingungslos beim Beenden der Funktion.
Wenn eine der folgenden Bedingungen erfüllt ist, ist das Verhalten undefiniert
  • 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.
2) Äquivalent zu std::string out = std::vformat(fmt, args);
std::vprint_unicode(stream, "{}", std::make_format_args(out));
.
3) Äquivalent zu std::vprint_unicode_buffered(stdout, fmt, args).


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 - 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

[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

[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) [bearbeiten]
führt Unicode-fähige Ausgabe unter Verwendung einer typ-erased Argumentdarstellung durch (type-erased)
(function) [bearbeiten]
(C++23)
druckt nach stdout oder einem Dateistream unter Verwendung der formatierten Darstellung der Argumente
(Funktionstemplate) [bearbeiten]
(C++20)
speichert die formatierte Darstellung der Argumente in einem neuen String
(Funktionstemplate) [bearbeiten]

[bearbeiten] Externe Links

1.  Unicode
2.  Der Unicode-Standard Version 14.0 - Kernspezifikation