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
状态-在某些情况下,这不会发生,但大多数情况下,情况都是一样的 您可能有兴趣了解操作符
为此对象重载:此函数通过引用而不是指针获取其参数。所以空值不包括在内。谢谢。我读了你推荐的链接,它为我解开了谜团。