Namespaces
Variants

C++ named requirements: FormattedOutputFunction

From cppreference.net
C++ named requirements

Inhaltsverzeichnis

Anforderungen

Eine FormattedOutputFunction ist eine Memberfunktion von std::basic_ostream oder eine Nicht-Member-Funktion unter Beteiligung von std::basic_ostream , die die folgenden Operationen ausführt:

  1. Konstruiert ein Objekt sentry vom Typ std::basic_ostream::sentry .
  2. Falls bool ( sentry ) true ist, versucht die gewünschte Ausgabe durchzuführen, indem Zeichen in den Ausgabestrom eingefügt werden, als ob durch Aufruf von rdbuf ( ) - > sputc ( ) . Andere öffentliche Member von std::basic_ostream können ebenfalls verwendet werden, aber virtuelle Member von rdbuf ( ) außer overflow() , xsputn() und sync() werden niemals aufgerufen.
  3. Zerstört sentry und gibt * this zurück.

Wenn sentry nicht konstruiert werden kann, oder bool ( sentry ) false ist, erfolgt keine Ausgabe.

Wenn die Ausgabe nicht generiert werden konnte, ruft es setstate ( std:: ios_base :: failbit ) auf, was eine Ausnahme werfen kann.

Wenn während der Ausgabe eine Exception ausgelöst wird, dann wird std:: ios_base :: badbit im Fehlerzustand von * this gesetzt, ohne dass eine std::ios_base::failure ausgelöst wird. Wenn Exceptions für badbit in der Exception-Maske dieses Streams aktiviert sind (d.h. ( exceptions ( ) & badbit ) ! = 0 ), wird die Exception ebenfalls erneut ausgelöst.

Wenn eine Ausnahme von der formatierten Ausgabefunktion geworfen wird, sentry wird ebenfalls zerstört, bevor die Funktion verlassen wird.

Padding

Formatierte Ausgabefunktionen bestimmen die Auffüllung gemäß std::num_put::do_put() Stufe 3.

(bis C++14)

Wenn eine formatierte Ausgabefunktion eines Streams os die Auffüllung bestimmt, geschieht dies wie folgt.

Gegeben eine CharT Zeichensequenz seq , wobei CharT der Zeichencontainertyp von os ist: Wenn die Länge von seq kleiner ist als os. width ( ) , werden so viele Kopien von os. fill ( ) zu dieser Sequenz hinzugefügt, wie nötig sind, um auf eine Breite von os. width ( ) Zeichen aufzufüllen.

Wenn ( os. flags ( ) & std:: ios_base :: adjustfield ) == std:: ios_base :: left den Wert true hat, werden die Füllzeichen nach der Zeichensequenz platziert; andernfalls werden sie vor der Zeichensequenz platziert.

(seit C++14)

Standardbibliothek

Die folgenden Standardbibliotheksfunktionen sind FormattedOutputFunction s .

(seit C++17)
außer dass (angenommen os ist ein Ausgabestrom-Objekt):
  • jede Ausnahme, die durch den Aufruf von std::vformat geworfen wird, wird unabhängig vom Wert von os. exceptions ( ) weitergegeben, ohne ios_base::badbit im Fehlerzustand von os zu setzen;
  • falls das Einfügen in os fehlschlägt, wird os. setstate ( ios_base :: badbit ) aufgerufen (was ios_base::failure werfen kann).
(seit C++23)

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 160 C++98 der Prozess zur Bestimmung, ob die gefangene Exception
erneut geworfen wird, erwähnte eine nicht-existierende Funktion exception()
korrigiert zu exceptions()
LWG 165 C++98 die einzige virtuelle Memberfunktion, die auf
rdbuf() aufgerufen werden durfte, war overflow()
erlaubt nun auch
xsputn() und sync()