首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >std::getline()返回

std::getline()返回
EN

Stack Overflow用户
提问于 2008-11-03 16:56:34
回答 4查看 21.7K关注 0票数 25

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

代码语言:javascript
复制
istream is;
string line;
while (!getline(is, line).eof())
{
    // ...
}

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

代码语言:javascript
复制
while (getline(is, line))

这是怎么回事?getline()返回一个流引用。是否以某种方式将其转换为指针?这实际上是一个很好的实践,还是我应该坚持第一种形式?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-11-03 17:02:46

getline()返回的istream将隐式调用其运算符void*()方法,该方法将返回流是否遇到错误。因此,它进行更多的检查而不是调用eof()

票数 27
EN

Stack Overflow用户

发布于 2008-11-03 17:02:05

更新:

我错误地指向了basic_istream::sentry类上操作符bool()方法的basic_istream documentation,但正如前面所指出的,实际情况并非如此。我投票支持查尔斯和卢克的正确答案。实际上调用的是void*()运算符。有关此in the C++ FAQ的更多信息。

票数 8
EN

Stack Overflow用户

发布于 2008-11-03 18:01:34

查尔斯确实给了correct answer

所调用的确实是std::basic_ios::operator void*(),而不是sentry::operator bool(),这与std::getline()返回std::basic_istream (因此是std::basic_ios)而不是哨兵这一事实是一致的。

对于非信仰者,请参阅:

on首选项站点上的文档,artima上的文章,

  • C++ FAQ lite §15.4

  • std::basic_ios::operator void*() ,...

否则,就像其他人已经说过的那样,选择第二种形式,它是规范的。如果确实需要冗长的代码,请使用not fail() --我从来不记得是否可以使用xxx.good()而不是!xxx.fail()

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/259269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档