我刚刚在这个答案中发现了一条评论说iostream::eof在循环条件下使用"几乎肯定是错误的".我通常使用类似的东西while(cin>>n)- 我猜是隐式检查EOF,为什么检查eof显式使用while (!cin.eof())错误?
它与scanf("...",...)!=EOF在C中使用有何不同(我经常使用没有问题)?
一个标准的习语是
while(std::getline(ifstream, str))
...
Run Code Online (Sandbox Code Playgroud)
所以如果这有效的话,我为什么不能说
bool getval(std::string &val)
{
...
std::ifstream infile(filename);
...
return std::getline(infile, val);
}
Run Code Online (Sandbox Code Playgroud)
g++ 说“ cannot convert 'std::basic_istream<char>' to 'bool' in return”。
值函数return中语句的布尔bool上下文是否与 的布尔上下文有所不同while(),以至于在一个上下文中执行的魔术转换std::basic_istream在另一个上下文中不起作用?
附录:这里显然有一些版本,也许还有语言标准依赖性。我在 g++ 8.3.0 中遇到了上述错误。但我在 gcc 4.6.3 或 LLVM (clang) 9.0.0 中没有得到它。