我在阅读中遇到了这段代码:
void assure(std::ifstream& infile ) {
if(!infile) { /* stuff */}
}
我使用函数参数类型ifstream&
和测试了好奇心ifstream
,它似乎有效。我很好奇条件表达式是如何工作的。这是 NULL 对象还是空对象的情况?我认为 C++ 对象不能为 NULL?
既然!infile
有效,那么失败的ifstream
对象是如何表示的?
感谢随后的启蒙。
它使用否定运算符,并且简单地与fail()
检查挂钩。
它并不完全相反good()
,因为它还检查 EOF ( eofbit
)。
(是的,引用总是指向一个对象,这个问题没有意义,只有一个指针可以为NULL)。
不会有太大的不同,不。两者都会导致非常相似的代码相同的行为。不同之处在于 的行为eof
,good
它将返回false
, whereoperator!
将其视为true
. 但是,在大多数情况下,这几乎没有什么区别,因为如果尝试读取文件末尾,failbit
则会将其设置为fstream
状态 - 在某些情况下不会发生这种情况,但大多数情况下,它是一样。