C++ 给定:如果(!infle)…使用ifstream infle(";test.txt";)是否有优势。。。与if(infle.good())。。。?

C++ 给定:如果(!infle)…使用ifstream infle(";test.txt";)是否有优势。。。与if(infle.good())。。。?,c++,ifstream,C++,Ifstream,我在阅读中遇到了以下代码: void assure(std::ifstream& infile ) { if(!infile) { /* stuff */} } 我使用函数参数类型ifstream&和ifstream进行了好奇测试,它似乎可以工作。我很好奇条件表达式是如何工作的。这是空对象还是空对象?我认为C++对象不能为null? 自从!infle工作,失败的ifstream对象是如何表示的 感谢随后的启示。它使用,并且只需连接到fail()检查 它与good()并不完全相反

我在阅读中遇到了以下代码:

void assure(std::ifstream& infile ) {  
  if(!infile) { /* stuff */}
}
我使用函数参数类型
ifstream&
ifstream
进行了好奇测试,它似乎可以工作。我很好奇条件表达式是如何工作的。这是空对象还是空对象?我认为C++对象不能为null? 自从<代码>!infle工作,失败的
ifstream
对象是如何表示的

感谢随后的启示。

它使用,并且只需连接到
fail()
检查

它与
good()
并不完全相反,因为它还检查EOF(
eofbit


(是的,引用总是指向一个对象,问题是没有意义的,只有指针可以为空)。

这不会有太大的区别,不会。两者都会导致非常相似的代码和相同的行为。不同之处在于
eof
上的行为,
good
将返回
false
for,其中
运算符
将其视为
。但是,在大多数情况下,这几乎没有什么区别,因为如果试图读取超过文件结尾的内容,则
failbit
将设置为
fstream
状态-在某些情况下,这不会发生,但大多数情况下,情况都是一样的

您可能有兴趣了解
操作符
为此对象重载:此函数通过引用而不是指针获取其参数。所以空值不包括在内。谢谢。我读了你推荐的链接,它为我解开了谜团。