对象引用如何作为布尔表达式工作?

时间:2014-05-06 07:51:21

标签: c++

我在C ++标准库中按文件流读取文件:

std::ifstream infile(path.c_str());
if (!infile.is_open())
{
    return -1;
}
std::string line;
while (std::getline(infile, line))
{
    std::cout << line << std::endl;
}

这很有效。让我印象深刻的是std::getline实际上会返回std::ifstream&;如何将对象引用作为布尔表达式?其次,如果我这样写:

while (NULL != std::getline(infile, line))

这也有效。我不明白为什么这里的引用像指针一样工作。

3 个答案:

答案 0 :(得分:4)

std::ifstreamconvertible to boolean。具体而言,如果流为good则为true,如果流为badfail则为false。

答案 1 :(得分:4)

它不是对象引用:std::ifstream支持转换为bool(在C ++ 11之前它曾经是void*),如下所示:{ {3}}

它返回true(非null指针在C ++ 11之前),除非流出错或在EOF。

答案 2 :(得分:2)

std::ifstream定义void * conversion operator。因此,您可以将引用与指针进行比较,并将其作为布尔条件进行比较。

从cplusplus.com

引用此转换运算符的返回值
  

返回值:如果设置了failbit或badbit中的至少一个,则为空指针。其他   否则