Blog
Ein Test auf iostream::eof() innerhalb einer Schleife ist meistens ein Fehler
Date: 2021-09-08 20:12
Beim Überarbeiten von C++-Quelltexten findet man oft Konstrukte wie while (! stream.eof()). In einer Schleife ist das Testen auf EOF fast immer falsch. Der >>-Operator ist schon völlig ausreichend, um auf Erfolg zu testen!
Falsch wäre etwa folgender Code:
while (! inputStream.eof()) { int i; inputStream >> i; }
Das Einlesen von i kann klappen, kann aber auch mittendrin mit gesetzten eof- und fail-Bits scheitern. Dann steht da irgendwas in der Variablen i.
Demgegenüber würde das hier schon eher abbrechen und niemals mit schlechten Daten weiterarbeiten:
int i; while (inputStream >> i) { }
Das liest sich auch gleich flüssiger.
Keywords: Refactoring C++ Meinung • Datenschutz • C++ • Politik • Refactoring • Gedichte • Links • Git