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++

MeinungC++RefactoringGedichteDatenschutzLinksPolitikGit