2

我对如何/为什么可以在条件句中使用 istream 有一个脆弱的理解。我读过这个问题:(为什么 istream 对象可以用作布尔表达式?)。

我不明白为什么编译没有错误……</p>

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
}
4

2 回答 2

2

cin因为is的隐式转换运算符

operator void*() const { ... }

它可以评估为零,所以你可以检查它是否为零

while (cin >> x) {}

bool声明为的转换运算符,explicit因此您的表达式不会调用它:

explicit operator bool(){ ... }

所以,你需要一个明确的演员:

if (true == static_cast<bool>(cin >> a))
{
}
于 2013-11-02T23:13:06.080 回答
0

cin >> n返回一个istream&. 因为结果用于比较,所以编译器搜索一个operator==(bool, istream)它找不到的。因此,您会收到一条错误消息。

于 2013-11-02T23:16:37.223 回答