Namensräume
Varianten
Aktionen

std::basic_ostream<CharT,Traits>::sentry

Von cppreference.com
< cpp‎ | io‎ | basic ostream
 
 
 
 
class sentry;

Ein Objekt der Klasse basic_ostream::sentry wird im lokalen Geltungsbereich zu Beginn jeder Memberfunktion von std::basic_ostream konstruiert, die eine Ausgabe durchführt (sowohl formatierte als auch unformatierte). Sein Konstruktor bereitet den Ausgabestrom vor: Er prüft, ob der Strom bereits in einem fehlerhaften Zustand ist, spült die gebundenen Ausgabeströme und führt bei Bedarf weitere implementierungsabhängige Aufgaben aus. Implementierungsabhängige Bereinigungen sowie das Spülen des Ausgabestroms bei Bedarf werden im Destruktor durchgeführt, sodass sichergestellt ist, dass sie auch dann erfolgen, wenn während der Ausgabe Ausnahmen ausgelöst werden.

Inhalt

[bearbeiten] Memberfunktionen

(Konstruktor)
konstruiert das sentry-Objekt. Alle Vorbereitungsschritte werden hier durchgeführt
(öffentliche Memberfunktion) [bearbeiten]
(Destruktor)
finalisiert das Stream-Objekt nach formatierten Ausgaben oder nach Ausnahmen, falls erforderlich
(öffentliche Memberfunktion)
operator=
der Zuweisungsoperator ist gelöscht
(öffentliche Memberfunktion)
operator bool
prüft, ob die Vorbereitung des Stream-Objekts erfolgreich war
(öffentliche Memberfunktion) [bearbeiten]

std::basic_ostream::sentry::sentry

explicit sentry( std::basic_ostream<CharT, Traits>& os );

Bereitet den Strom für die 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 Strömen zu synchronisieren. Während der Vorbereitung kann der Konstruktor setstate(failbit) aufrufen (was std::ios_base::failure auslösen kann).

Wenn nach Abschluss der Vorbereitung os.good() == true ist, geben alle nachfolgenden Aufrufe von operator bool true zurück.

Parameter

os - Ausgabestrom, der vorbereitet werden soll

Ausnahmen

std::ios_base::failure, wenn das Dateiende auftritt.


std::basic_ostream::sentry::~sentry

~sentry();

Wenn (os.flags() & std::ios_base::unitbuf) && !std::uncaught_exception() && os.good()) true ist, wird os.rdbuf()->pubsync() aufgerufen. Wenn diese Funktion -1 zurückgibt, wird badbit in os.rdstate() gesetzt, ohne eine Ausnahme weiterzugeben.


std::basic_ostream::sentry::operator bool

explicit operator bool() const;

Prüft, ob die Vorbereitung des Ausgabestroms erfolgreich war.

Parameter

(keine)

Rückgabewert

true, wenn die Vorbereitung des Ausgabestroms erfolgreich war, false andernfalls.

[bearbeiten] 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

[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 397 C++98 der Destruktor könnte os.flush() aufrufen, was Ausnahmen auslösen kann die Ausnahme wird nicht weitergegeben
LWG 442 C++98 operator bool war nicht als const deklariert (in der Synopse ist sie const) const hinzugefügt
LWG 835 C++98 wenn os unitbuf setzt, würde der Destruktor os.flush() aufrufen, was
eine UnformattedOutputFunction ist und ein weiteres sentry-Objekt erstellt
(dessen Destruktor dann wiederum ein weiteres sentry-Objekt erstellt und so weiter)
ruft
os.rdbuf()->pubsync()
in diesem Fall stattdessen auf

[bearbeiten] Siehe auch

fügt formatierte Daten ein
(public member function) [bearbeiten]