Namensräume
Varianten
Aktionen

C++ benannte Anforderungen: UnformattedOutputFunction

Von cppreference.com
 
 
C++ benannte Anforderungen
 

[bearbeiten] Anforderungen

Eine UnformattedOutputFunction ist eine Stream-Ausgabe-Funktion, die Folgendes ausführt:

1) Konstruiert ein Objekt vom Typ basic_ostream::sentry mit automatischer Speicherverwaltung, das Folgendes ausführt:
  • Wenn eofbit oder badbit für den Ausgabestream gesetzt sind, wird auch failbit gesetzt, und wenn Ausnahmen bei `failbit` in der Ausnahmemaske dieses Ausgabestreams aktiviert sind ((exceptions() & failbit) != 0), wird ios_base::failure ausgelöst.
  • Spült den gebundenen (`tie()`) Ausgabestream, falls zutreffend.
2) Prüft den Status des Sentry-Objekts durch Aufruf von `sentry::operator bool()`, was äquivalent zu basic_ios::good ist.
  • Wenn der Operator false zurückgibt oder der Konstruktor von Sentry eine Ausnahme auslöst, erfolgt keine Ausgabe.
  • Wenn der Operator true zurückgibt, wird versucht, die gewünschte Ausgabe durch Einfügen der Zeichen in den Ausgabestream durchzufü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() mit Ausnahme von overflow(), xsputn() und sync() werden niemals aufgerufen.
  • Wenn während der Ausgabe eine Ausnahme ausgelöst wird, wird `badbit` im Ausgabestream gesetzt. Wenn Ausnahmen bei `badbit` in der Ausnahmemaske dieses Streams aktiviert sind ((exceptions() & badbit) != 0), wird die Ausnahme ebenfalls erneut ausgelöst.
  • Wenn keine Ausnahme ausgelöst wurde, wird der von der Funktion angegebene Wert zurückgegeben.
3) In jedem Fall, ob durch Ausnahme beendet oder durch Rückgabe, wird der Destruktor des Sentry-Objekts vor dem Verlassen dieser Funktion aufgerufen.

[bearbeiten] Standardbibliothek

Die folgenden Standardbibliotheksfunktionen sind UnformattedOutputFunctions.

(seit C++11)

[bearbeiten] Defect Reports

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 63 C++98 die Ausnahmebehandlungsrichtlinie fehlte hinzugefügt
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 der einzige virtuelle Member, der aufgerufen werden durfte,
auf rdbuf() war `overflow()`
auch erlaubt
`xsputn()` und `sync()`