std::basic_ostream<CharT,Traits>:: sentry
|
class
sentry
;
|
||
Ein Objekt der Klasse
basic_ostream::sentry
wird im lokalen Gültigkeitsbereich am Anfang jeder Memberfunktion von
std::basic_ostream
erstellt, die Ausgaben durchführt (sowohl formatierte als auch unformatierte). Sein Konstruktor bereitet den Ausgabestrom vor: prüft, ob der Strom bereits in einem Fehlerzustand ist, leert die mit tie() verbundenen Ausgabeströme und führt bei Bedarf andere implementierungsdefinierte Aufgaben durch. Implementierungsdefinierte Bereinigungen sowie bei Bedarf das Leeren des Ausgabestroms werden im Destruktor durchgeführt, sodass garantiert ist, dass diese stattfinden, wenn während der Ausgabe Exceptions ausgelöst werden.
Inhaltsverzeichnis |
Memberfunktionen
|
(constructor)
|
Konstruiert das Sentry-Objekt. Alle Vorbereitungsaufgaben werden hier durchgeführt
(public member function) |
|
(destructor)
|
Finalisiert das Stream-Objekt nach formatierter Ausgabe oder bei Ausnahmen, falls notwendig
(public member function) |
|
operator=
|
Der Zuweisungsoperator ist gelöscht
(public member function) |
|
operator bool
|
Prüft, ob die Vorbereitung des Stream-Objekts erfolgreich war
(public member function) |
std::basic_ostream::sentry:: sentry
|
explicit
sentry
(
std::
basic_ostream
<
CharT, Traits
>
&
os
)
;
|
||
Bereitet den Stream für formatierte Ausgabe vor.
Wenn os. good ( ) false ist, wird zurückgekehrt. Andernfalls, wenn os. tie ( ) kein Nullzeiger ist, wird os. tie ( ) - > flush ( ) aufgerufen, um die Ausgabesequenz mit externen Streams zu synchronisieren. Während der Vorbereitung kann der Konstruktor setstate ( failbit ) aufrufen (was std::ios_base::failure werfen kann).
Wenn nach Abschluss der Vorbereitung os. good ( ) == true ist, dann werden alle nachfolgenden Aufrufe von operator bool true zurückgeben.
Parameter
| os | - | vorzubereitender Ausgabestream |
Ausnahmen
std::ios_base::failure wenn ein Dateiende-Zustand auftritt.
std::basic_ostream::sentry:: ~sentry
|
~sentry
(
)
;
|
||
Wenn ( os. flags ( ) & std:: ios_base :: unitbuf ) && ! std:: uncaught_exception ( ) && os. good ( ) ) true ist, ruft es os. rdbuf ( ) - > pubsync ( ) auf. Wenn diese Funktion - 1 zurückgibt, setzt es badbit in os. rdstate ( ) ohne eine Exception zu propagieren.
std::basic_ostream::sentry:: operator bool
|
explicit
operator
bool
(
)
const
;
|
||
Überprüft, ob die Vorbereitung des Ausgabestreams erfolgreich war.
Parameter
(keine)
Rückgabewert
true falls die Vorbereitung des Ausgabestreams erfolgreich war, false andernfalls.
Beispiel
#include <iostream> #include <sstream> struct Foo { char n[6]; }; std::ostream& operator<<(std::ostream& os, Foo& f) { std::ostream::sentry s(os); if (s) os.write(f.n, 5); return os; } int main() { Foo f = {"abcde"}; std::cout << f << '\n'; }
Ausgabe:
abcde
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 397 | C++98 | der Destruktor könnte os. flush ( ) aufrufen, was Ausnahmen werfen könnte | die Ausnahme wird nicht propagiert |
| LWG 442 | C++98 | operator bool war nicht als const deklariert (es ist const in der Synopse ) | const hinzugefügt |
| LWG 835 | C++98 |
falls
os
unitbuf
setzt, würde der Destruktor
os.
flush
(
)
aufrufen, was
eine UnformattedOutputFunction ist und ein weiteres Sentry-Objekt erzeugt (dessen Destruktor dann ein weiteres Sentry-Objekt erzeugt usw.) |
ruft in diesem Fall stattdessen
os. rdbuf ( ) - > pubsync ( ) auf |
Siehe auch
|
fügt formatierte Daten ein
(öffentliche Elementfunktion) |