Namespaces
Variants

std:: vprint_unicode, std:: vprint_unicode_buffered

From cppreference.net
< cpp ‎ | io
Print functions
Print functions
(C++23)
(C++23)
vprint_unicode vprint_unicode_buffered
(C++23) (C++23)
Definiert im 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 Ausgabestream.

1) Führt die folgenden Operationen in dieser Reihenfolge aus:
  1. Sperrt stream .
  2. Sei out die Zeichendarstellung der Formatierungsargumente, die durch args bereitgestellt und gemäß den in fmt gegebenen Spezifikationen formatiert werden.
  3. Schreibt out in den stream :
  • Falls stream auf ein Terminal verweist, das Unicode nur über eine native Unicode-API anzeigen kann, leert es den stream und schreibt out unter Verwendung der nativen Unicode-API in das Terminal.
  • Andernfalls schreibt es das unveränderte out in den stream .
Entsperrt den stream bedingungslos beim Funktionsaustritt.
Wenn eine der folgenden Bedingungen erfüllt ist, ist das Verhalten undefiniert:
  • stream ist kein gültiger Zeiger auf einen Ausgabe-C-Stream.
  • out enthält ungültige Unicode Codeeinheiten , wenn die native Unicode-API verwendet wird.
2) Entspricht std:: string out = std:: vformat ( fmt, args ) ;
std :: vprint_unicode ( stream, "{}" , std:: make_format_args ( out ) ) ;
.
3) Entspricht std :: vprint_unicode_buffered ( stdout , fmt, args ) .


Nach dem Schreiben von Zeichen in den Ausgabestream, stellt es einen beobachtbaren Kontrollpunkt her.

(since C++26)

Inhaltsverzeichnis

Parameter

stream - Ausgabedateistream, in den geschrieben wird
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 für die Formatierung verwendet wird; falls ausgelassen, werden die Argumente in Reihenfolge verwendet.

Die arg-id s in einer Formatzeichenkette müssen entweder alle vorhanden oder alle ausgelassen sein. 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.

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

Exceptions

Hinweise

Der C++-Standard empfiehlt den Implementierern, eine Diagnosemeldung auszugeben, wenn out ungültige Unicode-Codeeinheiten enthält.

Unter POSIX erfolgt das Schreiben auf ein Terminal mittels der üblichen Standard-I/O-Funktionen, daher besteht keine Notwendigkeit, ein Terminal anders als jeden anderen Dateistrom zu behandeln.

Unter Windows bezieht sich der Stream auf ein Terminal, wenn GetConsoleMode ( _get_osfhandle ( _fileno ( stream ) ) ) einen Wert ungleich Null zurückgibt (siehe Windows-Dokumentation für GetConsoleMode , _get_osfhandle und _fileno ). Die native Unicode-API unter Windows ist WriteConsoleW .

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
202403L (C++26)
(DR23)
Ungepufferte formatierte Ausgabe
202406L (C++26)
(DR23)
Aktivierung ungepufferter formatierter Ausgabe für weitere formatierbare Typen
__cpp_lib_format 202207L (C++23) Verfügbarmachung 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 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 Unicode
ausschließlich mit der nativen Unicode-API anzeigen kann
P3107R5 C++23 Druckoperationen waren immer gepuffert bietet ungepufferte Druckoperationen
P3235R3 C++23 die Namen der durch
P3107R5 hinzugefügten Funktionen waren irreführend
änderte die Funktionsnamen

Siehe auch

gibt auf stdout oder einen Dateistrom aus unter Verwendung von typeradierten Argumentdarstellungen
(Funktion)
führt Unicode-fähige Ausgabe unter Verwendung von typeradierten Argumentdarstellungen durch
(Funktion)
(C++23)
gibt auf stdout oder einen Dateistrom aus unter Verwendung von formatierter Darstellung der Argumente
(Funktions-Template)
(C++20)
speichert formatierte Darstellung der Argumente in einem neuen String
(Funktions-Template)

Externe Links

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