[C++] ios/istream, std::getline
Verfasst: 01.02.2014, 00:44
Hallo,
ich habe mal eine prinzipielle Frage zur Verwendung folgenden Codestücks:
Mir ist bewusst, dass hier der implizite überladene bool-Operator (seit C++11, vorher der void*-Operator) zum Einsatz kommt. Soweit ich nun aber rausfinden konnte gibt dieser !ios::fail() zurück. Damit kann ich schonmal ausschließen, dass irgendwas mit dem Stream nicht stimmt. ios::fail() liefert aber nur dann true, wenn das failbit oder das badbit gesetzt sind. Davon unabhängig ist aber das eofbit.
Kurz gesagt. Die obige Schleife müsste theoretisch fröhlich weitermachen, wenn sie am Ende des Streams angelangt ist. Mir ist klar, dass das Lesen nach dem Ende des Streams dann zu einem Fehler führt, welcher das failbit setzt. Aber theoretisch liest diese Schleife doch dann 1 mal zu viel oder seh ich das falsch?
Wenn ich es jedoch teste, wird die Schleife genau so oft ausgeführt wie es Zeilen gibt (ob die letzte Zeile mit dem Delimiter endet oder nicht ist dabei egal). Das verwirrt mich schon irgendwie. Ich habe irgendwie die Befürchtung, dass das in anderen Compilern wieder anders ist. Ich benutze gerade den VC10.
Hat jemand Ahnung?
ich habe mal eine prinzipielle Frage zur Verwendung folgenden Codestücks:
Code: Alles auswählen
std::string line;
while (std::getline(some_stream, line))
{
// Do something with `line`
}
Kurz gesagt. Die obige Schleife müsste theoretisch fröhlich weitermachen, wenn sie am Ende des Streams angelangt ist. Mir ist klar, dass das Lesen nach dem Ende des Streams dann zu einem Fehler führt, welcher das failbit setzt. Aber theoretisch liest diese Schleife doch dann 1 mal zu viel oder seh ich das falsch?
Wenn ich es jedoch teste, wird die Schleife genau so oft ausgeführt wie es Zeilen gibt (ob die letzte Zeile mit dem Delimiter endet oder nicht ist dabei egal). Das verwirrt mich schon irgendwie. Ich habe irgendwie die Befürchtung, dass das in anderen Compilern wieder anders ist. Ich benutze gerade den VC10.
Hat jemand Ahnung?