Namensräume
Varianten
Aktionen

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

Von cppreference.com
< cpp‎ | io‎ | basic istream
 
 
 
 
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) [bearbeiten]
(Destruktor)
finalisiert das Stream-Objekt nach formatierter Eingabe oder nach einer Ausnahme, falls erforderlich
(public member function) [bearbeiten]
operator=
[gelöscht]
nicht kopierbar
(öffentliche Memberfunktion)
operator bool
prüft, ob die Vorbereitung des Stream-Objekts erfolgreich war
(public member function) [bearbeiten]

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) [bearbeiten]
extrahiert Zeichen und Zeichen-Arrays
(function template) [bearbeiten]