I have a loop that reads each line in a file using getline()
:
istream is;
string line;
while (!getline(is, line).eof())
{
// ...
}
I noticed that calling getline()
like this also seems to work:
while (getline(is, line))
What's going on here? getline()
returns a stream reference. Is it being converted to a pointer somehow? Is this actually a good practice or should I stick to the first form?
The istream
returned by getline()
is having its operator void*()
method implicitly called, which returns whether the stream has run into an error. As such it's making more checks than a call to eof()
.