std::basic_istream<CharT,Traits>::sentry
| class sentry; |
||
Ein Objekt der Klasse basic_istream::sentry wird in lokalem Gültigkeitsbereich zu Beginn jeder Memberfunktion von std::basic_istream konstruiert, die eine Eingabe durchführt (sowohl formatierte als auch unformatierte). Sein Konstruktor bereitet den Eingabestrom vor: er prüft, ob der Strom bereits in einem fehlerhaften Zustand ist, leert die tie()'d Ausgabeströme, überspringt führende Leerzeichen, es sei denn, das Flag noskipws ist gesetzt, und führt bei Bedarf weitere implementierungsdefinierte Aufgaben durch. Die gesamte Bereinigung, falls erforderlich, wird im Destruktor durchgeführt, sodass sie garantiert stattfindet, auch wenn während der Eingabe Ausnahmen ausgelöst werden.
Inhalt |
[bearbeiten] Member types
traits_type
|
Traits
|
[bearbeiten] Member functions
| (Konstruktor) |
konstruiert das sentry-Objekt. Alle Vorbereitungsaufgaben werden hier erledigt (public member function) |
| (Destruktor) |
finalisiert das Stream-Objekt nach formatierter Eingabe oder nach einer Ausnahme, falls erforderlich (public member function) |
| operator= [gelöscht] |
nicht kopierbar (öffentliche Memberfunktion) |
| 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 formatierte Eingabe vor.
Wenn is.good() false ist, wird is.setstate(std::ios_base::failbit) aufgerufen und zurückgegeben. Andernfalls, wenn is.tie() kein Nullzeiger ist, wird is.tie()->flush() aufgerufen, um die Ausgabesequenz mit externen Streams zu synchronisieren. Dieser Aufruf kann unterdrückt werden, wenn der Ausgabe-Puffer von is.tie() leer ist. Die Implementierung kann den Aufruf von flush() bis zu einem Aufruf von is.rdbuf()->underflow() verzögern. Wenn kein solcher Aufruf erfolgt, bevor das sentry-Objekt zerstört wird, kann er ganz entfallen.
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 (wie durch die aktuell eingebundene Locale in is bestimmt). 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 auslösen kann).
Zusätzliche implementierungsdefinierte Vorbereitungen können stattfinden, die setstate(std::ios_base::failbit) aufrufen können (was std::ios_base::failure auslösen kann).
Wenn nach Abschluss der Vorbereitung is.good() = true ist, geben nachfolgende Aufrufe von operator bool true zurück.
Parameter
| ist | - | Eingabestrom, der vorbereitet werden soll |
| noskipws | - | true, wenn Leerzeichen nicht übersprungen werden sollen |
Ausnahmen
std::ios_base::failure, wenn beim Überspringen von Leerzeichen das Dateiende auftritt.
std::basic_istream::sentry::~sentry
| ~sentry(); |
||
Tut nichts.
std::basic_istream::sentry::operator bool
| explicit operator bool() const; |
||
Prüft, ob die Vorbereitung des Eingabestroms erfolgreich war.
Parameter
(keine)
Rückgabewert
true, wenn die Initialisierung des Eingabestroms erfolgreich war, andernfalls false.
[bearbeiten] 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
[bearbeiten] Defect reports
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 195 | C++98 | war unklar, ob der Konstruktor eofbit setzen würde |
wurde klargestellt |
| LWG 419 | C++98 | der Konstruktor hat failbit nicht gesetzt, wenn eofbit gesetzt wurde |
setzt in diesem Fall failbit |
[bearbeiten] Siehe auch
| extrahiert formatierte Daten (public member function) | |
| extrahiert Zeichen und Zeichen-Arrays (function template) |