我在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))
这也有效。我不明白为什么这里的引用像指针一样工作。
答案 0 :(得分:4)
std::ifstream
是convertible to boolean。具体而言,如果流为good
则为true,如果流为bad
或fail
则为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中的至少一个,则为空指针。其他 否则