我有一个循环,使用以下方法读取文件中的每一行getline():
istream is;
string line;
while (!getline(is, line).eof())
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
我注意到这样调用getline()似乎也有效:
while (getline(is, line))
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?getline()返回流引用.是以某种方式转换为指针?这实际上是一种很好的做法还是我应该坚持第一种形式?
更新:
我错误地指出,basic_istream文档有关basic_istream ::哨兵类运营商布尔()方法,但由于已经指出,这不是真正发生了什么.我已经投了查尔斯和吕克的正确答案.它实际上是操作符void*()被调用.更多关于C++ FAQ的内容.
查尔斯确实给出了正确答案.
所谓的确是std::basic_ios::operator void*(),而不是sentry::operator bool(),它与std::getline()返回a std::basic_istream(因此,a std::basic_ios)而不是哨兵的事实是一致的.
对于非信徒,请参阅:
否则,正如其他人已经说过的那样,更喜欢规范的第二种形式.fail()如果你真的想要一个冗长的代码,请不要使用- 我永远不会记得是否xxx.good()可以使用代替!xxx.fail()