2010-11-27 144 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