2010-11-27 108 views
9
#include <iostream> 
#include <fstream> 

using namespace std; 

int main() 
{ 

    ifstream file0("file0.txt"); 
    ifstream file1("file1.txt"); 

    if (file0 != file1) { 
     cout << "What is being compared?" << endl; 
    } 

} 

如果上面的代码,有条件比较的是什么?我相信这是指针值,但我无法找到支持性证据。!=运营商和文件流

谢谢!

+0

可以通过测试是否相等来实现“正在比较指针”的步骤。不应该cout。 – Tom 2010-11-27 22:53:41

回答

4

当对ifstream进行比较时,operator void*将被调用。如果你正在使用visual studio,你可以看到这个,如果你选择查看反汇编的代码。

运营商可以找到here。 正如你所看到的:

返回的指针不打算被引用,它只是表示没有设置错误标志时的成功。

因此,如果两个ifstream失败,他们将是平等的。如果他们成功(虽然我不确定指针值来自哪里),他们将而不是等于[这已经在VS上测试过]。

+1

说,编译器如何知道在运算符bool()上选择运算符void *()?什么定义了优先级? – chrisaycock 2010-11-27 23:27:38