一项标准的习语是:
A standard idiom is
while(std::getline(ifstream, str))
...
所以如果那样可行,为什么我不能这么说呢?
bool getval(std::string &val)
{
...
std::ifstream infile(filename);
...
return std::getline(infile, val);
}
g++显示:“cannot convert 'std::basic_istream<char>' to 'bool' in return
”。
在返回布尔值的函数中,return
语句的布尔上下文是否与while()
的布尔上下文有所不同,以至于std::basic_istream
在一个上下文中执行的魔法转换在另一个上下文中无法工作?
补充说明:这似乎与某些版本和可能的语言标准有关。我在使用g++ 8.3.0时遇到了上述错误。但是我没有在gcc 4.6.3或LLVM(clang)9.0.0中遇到此问题。
return !!std::getline(infile, val);
可以作为一个选项。 - Ted Lyngmoreturn std::getline(infile, val).good();
- Bob__