!=运算符和文件流

rsh*_*erd 9 c++

#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;
    }

} 
Run Code Online (Sandbox Code Playgroud)

如果上面的代码,有条件的是什么?我相信它是指针值,但我无法找到支持证据.

谢谢!

Def*_*ult 4

当在 ifstream 上进行比较时,operator void*将被调用。如果您使用 Visual Studio,如果您选择查看代码的反汇编,则可以看到这一点。

可以在这里找到操作员。正如您所看到的:

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

因此,如果两个 ifstreams 都失败,它们将是相等的。如果它们成功(虽然我不确定指针值来自哪里),它们将相等[这已经在 VS 上进行了测试]。

  • 流没有“operator bool”。返回的“void*”可在布尔上下文中隐式转换为 bool(“if (std::cin)...”)。 (2认同)
  • @UncleBens 从 C++11 开始,流就有 `operator bool`。然而,对于编译器来说没有歧义,因为“operator bool”是“显式的”。例如,开发人员必须请求“bool”值才能使用“operator bool”。例如:`if ((bool)file0)` (2认同)