kannst du mir das bitte etwas näher erklären? ich dachte, sachen wie while(cin) würden über nen operator bool funktionieren.
Der Begriff "Safe Bool Idiom" sollte eigentlich reichen, um sich darüber zu informieren...
Aber gut. Die Streams benutzen keinen operator bool, weil bool in arithmetischen Ausdrücken implizit zu 0 oder 1 konvertiert wird. Um Fehler zu vermeiden, gibt es deshalb einen operator void*. Ein Zeiger kann in einem logischen Ausdruck als Wahrheitswert dienen, aber nicht als arithmetischer Zahlenwert. Dadurch wird Folgendes möglich:
|
C-/C++-Quelltext
|
1
|
if (InputStream >> Var)
|
Würde der Stream einen operator bool bereitstellen, wäre das folgende Beispiel ein gültiger Ausdruck, sofern Var als Ganzzahl interpretiert werden kann (man beachte
InputStream):
|
C-/C++-Quelltext
|
1
|
if (InputStream << Var)
|
Im neuen C++-Standard werden explizite Cast-Operatoren eingeführt, die diesen Workaround überflüssig machen und noch typsicherer sind.