我对如何/为什么可以在条件语中使用istream有一个脆弱的理解。我读过这个问题:( Why istream object can be used as a bool expression?)。
我不明白为什么这个编译没有错误......
while (cin >> n) {
// things and stuff
}
...虽然无法编译(消息error: invalid operands to binary expression ('int' and '__istream_type' (aka 'basic_istream<char, std::char_traits<char> >'))
)
while (true == (cin >> n)) {
// things and stuff
}
答案 0 :(得分:2)
因为cin
的隐式转换运算符是
operator void*() const { ... }
并且它可以评估为零,因此您可以将其检查为零
while (cin >> x) {}
bool
的转化运算符声明为explicit
,因此您的表达式不会调用它:
explicit operator bool(){ ... }
所以,你需要一个明确的演员:
if (true == static_cast<bool>(cin >> a))
{
}
答案 1 :(得分:0)
cin >> n
会返回istream&
。由于结果用于比较,因此编译器会搜索无法找到的operator==(bool, istream)
。因此,您会收到一条错误消息。