C ++:如何在条件表达式中将istream转换为bool

时间:2013-05-27 16:52:04

标签: c++ istream

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
}

任何人都可以解释它是如何在条件表达式中转换为bool的吗?

2 个答案:

答案 0 :(得分:5)

来自cppreference

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

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

因为if语句是一个布尔上下文,它将调用std::istream的成员函数操作符。

答案 1 :(得分:0)

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

所以你实际上写的是if(istream),它反过来调用操作符bool ..

条件0中的

是假的,其他任何都是真的 - > istream有一个opeartor bool来检查流是否正常所以它将返回!fail()...因此为真。