Namespaces
Variants

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

From cppreference.net
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)