当前位置:  开发笔记 > 编程语言 > 正文

std :: getline()返回

如何解决《std::getline()返回》经验,为你挑选了3个好方法。

我有一个循环,使用以下方法读取文件中的每一行getline():

istream is;
string line;
while (!getline(is, line).eof())
{
    // ...
}

我注意到这样调用getline()似乎也有效:

while (getline(is, line))

这里发生了什么?getline()返回流引用.是以某种方式转换为指针?这实际上是一种很好的做法还是我应该坚持第一种形式?



1> Charles Ande..:

istream通过返回getline()由具有其操作void*()方法隐含地调用,返回该流是否已碰到一个错误.因此,它比调用更多的支票eof().



2> Todd Gamblin..:

更新:

我错误地指出,basic_istream文档有关basic_istream ::哨兵类运营商布尔()方法,但由于已经指出,这不是真正发生了什么.我已经投了查尔斯和吕克的正确答案.它实际上是操作符void*()被调用.更多关于C++ FAQ的内容.


你的链接已经死了

3> Luc Hermitte..:

查尔斯确实给出了正确答案.

所谓的确是std::basic_ios::operator void*(),而不是sentry::operator bool(),它与std::getline()返回a std::basic_istream(因此,a std::basic_ios)而不是哨兵的事实是一致的.

对于非信徒,请参阅:

cppreference网站上的std :: basic_ios :: operator void*()文档,

关于artima 的The Safe Bool Idiom文章,

C++ FAQlite§15.4,

标准, ...

否则,正如其他人已经说过的那样,更喜欢规范的第二种形式.fail()如果你真的想要一个冗长的代码,请不要使用- 我永远不会记得是否xxx.good()可以使用代替!xxx.fail()

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有