我在阅读时遇到了这段代码:
void assure(std::ifstream& infile ) {
if(!infile) { /* stuff */}
}
我使用函数参数类型ifstream&
和ifstream
测试了好奇心,它似乎有效。我很好奇条件表达式可能如何工作。这是NULL对象还是空对象的情况?我以为C ++对象不能为NULL?
由于!infile
有效,如何表示失败的ifstream
对象?
感谢随之而来的启蒙。
答案 0 :(得分:2)
它使用negate operator,只是挂钩fail()
支票。
它并不完全与good()
相反,因为它也会检查EOF(eofbit
)。
(是的,引用总是指向一个对象,问题没有意义,只有指针可以为NULL)。
答案 1 :(得分:0)
它不会产生任何重大影响,不会。两者都会导致非常相似的代码具有相同的行为。区别在于eof
上的行为,good
将返回false
,operator!
将其视为true
。但是,这在大多数情况下几乎没有区别,因为如果尝试读取文件末尾,failbit
将设置为fstream
状态 - 在某些情况下,这不会发生了,但大多数时候,情况都是一样的。