0

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

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

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

既然!infile有效,那么失败的ifstream对象是如何表示的?

感谢随后的启蒙。

4

2 回答 2

2

它使用否定运算符,并且简单地与fail()检查挂钩。

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

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

于 2013-03-02T17:36:24.560 回答
0

不会有太大的不同,不。两者都会导致非常相似的代码相同的行为。不同之处在于 的行为eofgood它将返回false, whereoperator!将其视为true. 但是,在大多数情况下,这几乎没有什么区别,因为如果尝试读取文件末尾,failbit则会将其设置为fstream状态 - 在某些情况下不会发生这种情况,但大多数情况下,它是一样。

于 2013-03-02T17:45:32.720 回答