Streamzustände: Einführung

Wir wollen uns nun ein wenig ausführlicher mit dem Stream-Konzept auseinandersetzen, insbesondere mit der Fehlerbehandlung, wenn etwa eine Ausgabeanweisung -- aus welchen Grund auch immer -- nicht korrekt durchgeführt werden konnte. Hierzu wird der Begriff des Zustandes eines Streams eingeführt.

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.