std::basic_istream<CharT,Traits>:: sentry
|
class
sentry
;
|
||
Ein Objekt der Klasse
basic_istream::sentry
wird im lokalen Geltungsbereich am Anfang jeder Elementfunktion von
std::basic_istream
erstellt, die Eingabe durchführt (sowohl formatierte als auch unformatierte). Sein Konstruktor bereitet den Eingabestrom vor: prüft, ob der Strom bereits in einem Fehlerzustand ist, leert die tie()'d Ausgabeströme, überspringt führende Leerzeichen, sofern nicht das
noskipws
Flag gesetzt ist, und führt bei Bedarf andere implementierungsdefinierte Aufgaben durch. Alle notwendigen Bereinigungen werden im Destruktor durchgeführt, sodass garantiert ist, dass sie stattfinden, wenn während der Eingabe Ausnahmen ausgelöst werden.
Inhaltsverzeichnis |
Mitgliedertypen
traits_type
|
Traits
|
Memberfunktionen
|
(constructor)
|
Konstruiert das Sentry-Objekt. Alle Vorbereitungsaufgaben werden hier durchgeführt
(public member function) |
|
(destructor)
|
Finalisiert das Stream-Objekt nach formatiertem Input oder nach einer Exception, falls notwendig
(public member function) |
|
operator=
[deleted]
|
nicht kopierbar zuweisbar
(public member function) |
|
operator bool
|
prüft, ob die Vorbereitung des Stream-Objekts erfolgreich war
(public member function) |
std::basic_istream::sentry:: sentry
|
explicit
sentry
(
std::
basic_istream
<
CharT, Traits
>
&
is,
bool
noskipws
=
false
)
;
|
||
Bereitet den Stream für formatierten Eingang vor.
Wenn is. good ( ) false ist, ruft es is. setstate ( std:: ios_base :: failbit ) auf und kehrt zurück. Andernfalls, wenn is. tie ( ) kein Nullzeiger ist, ruft es is. tie ( ) - > flush ( ) auf, um die Ausgabesequenz mit externen Streams zu synchronisieren. Dieser Aufruf kann unterdrückt werden, wenn der Put-Bereich von is. tie ( ) leer ist. Die Implementierung kann den Aufruf von flush ( ) verzögern bis zu einem Aufruf von is. rdbuf ( ) - > underflow ( ) erfolgt. Wenn kein solcher Aufruf erfolgt, bevor das Sentry-Objekt zerstört wird, kann es vollständig eliminiert werden.
Wenn noskipws null ist und is. flags ( ) & std:: ios_base :: skipws ungleich null ist, extrahiert und verwirft die Funktion alle Leerzeichen, bis das nächste verfügbare Zeichen kein Leerzeichen ist (bestimmt durch die aktuell eingestellte Locale in is ). Wenn is. rdbuf ( ) - > sbumpc ( ) oder is. rdbuf ( ) - > sgetc ( ) traits :: eof ( ) zurückgibt, ruft die Funktion setstate ( std:: ios_base :: failbit | std:: ios_base :: eofbit ) auf (was std::ios_base::failure werfen kann).
Zusätzliche implementierungsdefinierte Vorbereitungen können stattfinden, die setstate ( std:: ios_base :: failbit ) aufrufen können (was std::ios_base::failure werfen kann).
Wenn nach Abschluss der Vorbereitung is. good ( ) == true ist, dann werden alle nachfolgenden Aufrufe von operator bool true zurückgeben.
Parameter
| is | - | vorzubereitender Eingabestream |
| noskipws | - | true wenn Leerzeichen nicht übersprungen werden sollen |
Ausnahmen
std::ios_base::failure wenn beim Überspringen von Leerzeichen ein Dateiende-Zustand auftritt.
std::basic_istream::sentry:: ~sentry
|
~sentry
(
)
;
|
||
Tut nichts.
std::basic_istream::sentry:: operator bool
|
explicit
operator
bool
(
)
const
;
|
||
Überprüft, ob die Vorbereitung des Eingabestreams erfolgreich war.
Parameter
(keine)
Rückgabewert
true falls die Initialisierung des Eingabestreams erfolgreich war, false andernfalls.
Beispiel
#include <iostream> #include <sstream> struct Foo { char n[5]; }; std::istream& operator>>(std::istream& is, Foo& f) { std::istream::sentry s(is); if (s) is.read(f.n, 5); return is; } int main() { std::string input = " abcde"; std::istringstream stream(input); Foo f; stream >> f; std::cout.write(f.n, 5); std::cout << '\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 | Korrektes Verhalten |
|---|---|---|---|
| LWG 195 | C++98 |
es war unklar, ob der Konstruktor
eofbit
setzen würde
|
klargestellt |
| LWG 419 | C++98 |
der Konstruktor setzte
failbit
nicht, wenn
eofbit
gesetzt wurde
|
setzt
failbit
in diesem Fall
|
Siehe auch
|
extrahiert formatierte Daten
(öffentliche Elementfunktion) |
|
|
extrahiert Zeichen und Zeichenarrays
(Funktions-Template) |