Warum kann man in C++ die "cin >> x" als booleschen ausdruck verwenden?

... komplette Frage anzeigen

1 Antwort

Das liegt an einer fundamentalen Eigenschaft, die C++ von C "geerbt" hat: es existieren keine "starken" Typen; Variablen werden so interpretiert, wie es gerade opportun scheint.

Der Rückgabetyp von

cin >> variable

ist nach http://www.cplusplus.com/reference/istream/istream/operator-free/

istream&

also ein Pointer auf ein istream-Objekt.

Dies hat zwei Effekte:

1. man kann mit einer einzigen Anweisung mehrere Werte einlesen

cin >> variable1 >> variable2

2. der >>-Operator (eines Streams) gibt einen speziellen Wert zurück, wenn das Ende des Streams erreicht ist - einen Zeiger auf einen nicht-existenten Stream, einen Nullpointer.

C++ kennt (wie erwähnt) standardmäßig keine stark typisierten booleschen Variablen: alles, was sich irgendwie als Zahl interpretieren lässt, wird als false interpretiert, falls es gleich 0 ist, und als true, falls es ungleich 0 ist.

Für Pointer heißt das, ein Pointer wird als false interpretiert, wenn er ein Nullpointer ist, und als true sonst.

Damit wird in

if (inputstream >> variable) {true_branch} else {false_branch}

der true_branch genau dann ausgeführt, wenn (nach dem Einlesen und Zuweisen von variable) noch weitere Daten von inputstream zu erwarten sind, und der false_branch genau dann, wenn inputstream an seinem Ende angekommen ist.

Das führt natürlich zu einem konzisen (knappen) Code und ist für erfahrene C- und C++-Programmierer unmittelbar verständlich, kann aber in komplizierteren Ausdrücken zu schwer auffindbaren Fehlern führen.

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?