Ste*_*mit 33 c++ boolean ifstream
一个标准的习语是
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 中没有得到它。
Fat*_*KIR 49
的布尔转换运算符是std::basic_istream。explicit这意味着该类型的实例不会隐式变为 a,bool而是可以显式转换为 a,例如通过键入bool(infile)。
条件语句考虑显式布尔转换运算符,即 的表达式部分等if。while有关上下文转换的更多信息请参见此处。
但是,return 语句不会考虑explicit转换运算符或构造函数。因此,您必须将其显式转换为 a 的布尔值return。