4

istream运算符>>用于读取数据,函数返回对 istream 的引用。

例如,

istream& operator>> (bool& val);

但是在条件语句中使用istream时如何将其转换为bool。

例如,

ifstream ifs(.....);  // open the file
istream &is = (istream&)ifs;

char c;

if(is >> c)   // how the istream is been evaluated into as bool
{
    // character read
}

谁能解释它是如何在条件表达式中转换为布尔值的?

4

2 回答 2

8

cppreference

   explicit std::basic_ios::operator bool() const;

如果流没有发生错误并且准备好 I/O 操作,则返回 true。具体来说,返回!fail().

因此,由于 if 语句是布尔上下文,它将调用std::istream的成员函数运算符。

于 2013-05-27T16:55:01.287 回答
0

运算符 >> 返回对 istream (istream&) 的引用。

所以你实际上是在写 if (istream) 这反过来又调用操作员 bool..

在条件句中,0 为假,其他为真-> istream 有一个操作员布尔值,用于检查流是否正常,因此它将返回!fail()...因此为真。

于 2013-05-27T16:57:00.273 回答