C++ named requirements: UnformattedOutputFunction
From cppreference.net
Anforderungen
Eine UnformattedOutputFunction ist eine Stream-Ausgabefunktion, die Folgendes ausführt:
1)
Konstruiert ein Objekt vom Typ
basic_ostream::sentry
mit automatischer Speicherdauer, das Folgendes ausführt:
-
Falls
eofbit
oder
badbit
im Ausgabestrom gesetzt sind, wird ebenfalls
failbit
gesetzt, und wenn Exceptions für
failbitin der Exception-Maske dieses Ausgabestroms aktiviert sind ( ( exceptions ( ) & failbit ) ! = 0 ), wird ios_base::failure geworfen. - Leert den mit tie() verknüpften Ausgabestrom, falls zutreffend.
2)
Überprüft den Status des Sentry durch Aufruf von
sentry::operator bool()
, was äquivalent zu
basic_ios::good
ist.
- Falls der Operator false zurückgibt oder der Konstruktor des Sentry eine Exception wirft, findet keine Ausgabe statt.
- Falls der Operator true zurückgibt, wird versucht, die gewünschte Ausgabe durchzuführen, indem die Zeichen in den Ausgabestream 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.
-
-
Falls während der Ausgabe eine Exception geworfen wird, wird
badbitim Ausgabestream gesetzt. Falls Exceptions fürbadbitin der Exception-Maske dieses Streams aktiviert sind ( ( exceptions ( ) & badbit ) ! = 0 ), wird die Exception ebenfalls erneut geworfen. - Falls keine Exception geworfen wurde, wird der von der Funktion spezifizierte Wert zurückgegeben.
-
Falls während der Ausgabe eine Exception geworfen wird, wird
3)
In jedem Fall, ob durch Exception oder Rückgabe beendet, wird der Destruktor des Sentry aufgerufen, bevor diese Funktion verlassen wird.
Standardbibliothek
Die folgenden Standardbibliotheksfunktionen sind UnformattedOutputFunction s .
- basic_ostream::operator<< (basic_streambuf*)
- basic_ostream::put
- basic_ostream::write
- basic_ostream::flush
|
(seit C++11) |
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 63 | C++98 | die Ausnahmebehandlungsrichtlinie fehlte | hinzugefügt |
| LWG 160 | C++98 |
der Prozess zur Bestimmung, ob die abgefangene Ausnahme
erneut ausgeworfen wird, bezog sich auf 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()
|