Namensräume
Varianten
Aktionen

C++ benannte Anforderungen: FormattedOutputFunction

Von cppreference.com
 
 
C++ benannte Anforderungen
 

Inhalt

[bearbeiten] Anforderungen

Eine FormattedOutputFunction ist eine Stream-Ausgabefunktion, die Folgendes ausführt:

  • Konstruiert ein Objekt des Typs basic_ostream::sentry mit automatischer Speicherzuweisung, welches Folgendes ausführt:
  • Wenn eofbit oder badbit im Ausgabestrom gesetzt sind, wird auch failbit gesetzt, und wenn Ausnahmen für failbit in der Ausnahmemaske dieses Ausgabestroms aktiviert sind ((exceptions() & failbit) != 0), wird ios_base::failure ausgelöst.
  • Leert den gekoppelten Ausgabestrom, falls zutreffend.
  • Prüft den Status des Sentry durch Aufrufen von sentry::operator bool(), was äquivalent zu basic_ios::good ist.
  • Wenn der Sentry false zurückgibt oder der Konstruktor des Sentry eine Ausnahme auslöst, erfolgt keine Ausgabe.
  • Wenn der Sentry true zurückgibt, wird versucht, die gewünschte Ausgabe durch Einfügen der Zeichen in den Ausgabestrom auszuführen, als ob rdbuf()->sputc() aufgerufen würde. 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.
  • Wenn die Ausgabe nicht generiert werden konnte, wird failbit gesetzt. Wenn Ausnahmen für failbit in der Ausnahmemaske dieses Stroms aktiviert sind ((exceptions() & failbit) != 0), wird ios_base::failure ausgelöst.
  • Wenn während der Ausgabe eine Ausnahme ausgelöst wird, wird badbit im Ausgabestrom gesetzt. Wenn Ausnahmen für badbit in der Ausnahmemaske dieses Stroms aktiviert sind ((exceptions() & badbit) != 0), wird die Ausnahme ebenfalls erneut ausgelöst.
  • Wenn keine Ausnahme ausgelöst wurde, wird *this zurückgegeben.
  • In jedem Fall, ob durch Ausnahme beendet oder Rückgabe, wird der Destruktor des Sentry aufgerufen, bevor diese Funktion verlassen wird.

[bearbeiten] Auffüllen

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

(bis C++14)

Wenn eine formatierte Ausgabefunktion eines Stroms os das Auffüllen bestimmt, tut sie dies wie folgt.

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

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

(seit C++14)

[bearbeiten] Standardbibliothek

Die folgenden Standardbibliotheksfunktionen sind FormattedOutputFunctions.

(seit C++17)
außer dass (gegeben os ist ein Ausgabe-Stream-Objekt)
  • jede Ausnahme, die durch den Aufruf von std::vformat ausgelöst wird, wird ohne Rücksicht auf den Wert von os.exceptions() weitergegeben und ohne ios_base::badbit im Fehlerzustand von os zu setzen;
  • Wenn das Einfügen in os fehlschlägt, wird os.setstate(ios_base::badbit) aufgerufen (was ios_base::failure auslösen kann).
(seit C++23)

[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 160 C++98 Der Prozess zur Bestimmung, ob die abgefangene Ausnahme
erneut ausgelöst wird, erwähnte eine nicht existierende Funktion exception().
korrigiert zu exceptions()
LWG 165 C++98 das einzige virtuelle Mitglied, das aufgerufen werden durfte
auf rdbuf() war overflow()
auch erlaubt
xsputn() und sync()