给定:ifstream infile(“test.txt”)使用if(!infile)...与if(infile.good())...有什么好处?

时间:2013-03-02 17:32:00

标签: c++ ifstream

我在阅读时遇到了这段代码:

void assure(std::ifstream& infile ) {  
  if(!infile) { /* stuff */}
}

我使用函数参数类型ifstream&ifstream测试了好奇心,它似乎有效。我很好奇条件表达式可能如何工作。这是NULL对象还是空对象的情况?我以为C ++对象不能为NULL?

由于!infile有效,如何表示失败的ifstream对象?

感谢随之而来的启蒙。

2 个答案:

答案 0 :(得分:2)

它使用negate operator,只是挂钩fail()支票。

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

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

答案 1 :(得分:0)

它不会产生任何重大影响,不会。两者都会导致非常相似的代码具有相同的行为。区别在于eof上的行为,good将返回falseoperator!将其视为true。但是,这在大多数情况下几乎没有区别,因为如果尝试读取文件末尾,failbit将设置为fstream状态 - 在某些情况下,这不会发生了,但大多数时候,情况都是一样的。