Jeder Stream (istream, ostream, ftream ...) kann sich grundsätzlich in verschiedenen Zuständen befinden. Er kann sich entweder in einem "guten", d.h. fehlerfeien, oder aber in einem fehlerhaften Zustand befinden. Letzterer wird noch nach der Art der Fehlerhaftigkeit und die Auswirkungen auf den Fortlauf des Programms unterschieden. Doch dazu später mehr (vgl. Zustands-Flags).
Beginnen wollen wir dieses Kapitel mit einem kleinen Beispiel. Das Prinzip, das hinter dem Beispielprogramm steckt, wird häufig verwendet, um zu überprüfen, ob eine Eingabe erfolgreich war:
if (cin >> x) {
// Einlesen hat geklappt
...
}
Auf den ersten Blick ist keineswegs klar, wieso dieser Ausdruck auch tatsächlich
das testet, was man erwartet.
Der Ausdruck cin >> x
liefert nämlich keinen boolschen
Wert, sondern, damit ein verketteter Aufruf möglich ist, zunächst
wieder cin
. Es muß demnach so etwas wie eine implizite Typumwandlung
stattgefunden haben.
Genaugenommen wird getestet, ob sich der cin
in einem fehlerfreien Zustand befindet. Wir werden am Ende des Kapitels auf dieses Beispiel
zurückkommen.