相关疑难解决方法(0)

为什么循环条件中的iostream :: eof被认为是错误的?

我刚刚在这个答案中发现了一条评论说iostream::eof在循环条件下使用"几乎肯定是错误的".我通常使用类似的东西while(cin>>n)- 我猜是隐式检查EOF,为什么检查eof显式使用while (!cin.eof())错误?

它与scanf("...",...)!=EOF在C中使用有何不同(我经常使用没有问题)?

c++ iostream c++-faq

564
推荐指数
5
解决办法
6万
查看次数

为什么我不能返回 std::getline 的 as-if-boolean 结果?

一个标准的习语是

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 中没有得到它。

c++ boolean ifstream

33
推荐指数
1
解决办法
2183
查看次数

标签 统计

c++ ×2

boolean ×1

c++-faq ×1

ifstream ×1

iostream ×1