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的吗?
答案 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()...因此为真。