C++ benannte Anforderungen: UnformattedOutputFunction
Von cppreference.com
< cpp | benannte req
[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.
- basic_ostream::operator<<(basic_streambuf*)
- basic_ostream::put
- basic_ostream::write
- basic_ostream::flush
|
(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()` |