C++ benannte Anforderungen: FormattedOutputFunction
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
failbitgesetzt, und wenn Ausnahmen fürfailbitin der Ausnahmemaske dieses Ausgabestroms aktiviert sind ((exceptions() & failbit) != 0), wird ios_base::failure ausgelöst. - Leert den gekoppelten Ausgabestrom, falls zutreffend.
- Wenn eofbit oder badbit im Ausgabestrom gesetzt sind, wird auch
- 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
failbitgesetzt. Wenn Ausnahmen fürfailbitin 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
badbitim Ausgabestrom gesetzt. Wenn Ausnahmen fürbadbitin 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.
- Wenn die Ausgabe nicht generiert werden konnte, wird
- 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 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.
- basic_ostream::operator<<(std::basic_ostream&, int / long / double / void* / bool)
- operator<<(std::basic_ostream&, char)
- operator<<(std::basic_ostream&, char*)
- operator<<(std::basic_ostream&, const std::bitset&)
- operator<<(std::basic_ostream&, const std::basic_string&)
-
operator<<, wenn aufgerufen auf den Rückgabewert von std::put_money
| (seit C++17) |
|
(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 erlaubtxsputn() und sync() |