!=运营商和文件流
问题描述:
#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;
}
}
如果上面的代码,有条件比较的是什么?我相信这是指针值,但我无法找到支持性证据。!=运营商和文件流
谢谢!
答
当对ifstream进行比较时,operator void*
将被调用。如果你正在使用visual studio,你可以看到这个,如果你选择查看反汇编的代码。
运营商可以找到here。 正如你所看到的:
返回的指针不打算被引用,它只是表示没有设置错误标志时的成功。
因此,如果两个ifstream失败,他们将是平等的。如果他们成功(虽然我不确定指针值来自哪里),他们将而不是等于[这已经在VS上测试过]。
+1
说,编译器如何知道在运算符bool()上选择运算符void *()?什么定义了优先级? – chrisaycock 2010-11-27 23:27:38
可以通过测试是否相等来实现“正在比较指针”的步骤。不应该cout。 – Tom 2010-11-27 22:53:41