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

उत्तर

4

operator void* पर एक ifstream पर तुलना करते समय कहा जाएगा। यदि आप विजुअल स्टूडियो का उपयोग कर रहे हैं तो आप इसे देख सकते हैं यदि आप कोड के डिस्सेप्लर देखना चुनते हैं।

ऑपरेटर here पाया जा सकता है। आप का उल्लेख देख सकते हैं:

सूचक लौटे इरादा नहीं है संदर्भित किया जा करने के लिए, यह सिर्फ सफलता जब त्रुटि झंडे में से कोई भी सेट कर रहे हैं इंगित करता है।

तो यदि दोनों ifstreams विफल हो जाते हैं, तो वे बराबर होंगे। यदि वे सफल होते हैं (हालांकि मुझे यकीन नहीं है कि सूचक मूल्य कहां से आता है) वे बराबर नहीं होंगे [यह वीएस पर परीक्षण किया गया है]।

+1

कहें, संकलक ऑपरेटर शून्य()) ऑपरेटर बूल() पर कैसे चुनता है? क्या प्राथमिकता परिभाषित करता है? – chrisaycock

+0

@ क्रिस: मैं वास्तव में एक ही चीज़ के बारे में सोच रहा था। यह मेरे ज्ञान से परे है .. – Default

+2

स्ट्रीम में 'ऑपरेटर बूल' नहीं है। लौटा 'शून्य * 'बूलियन संदर्भों में बूल के लिए पूरी तरह से परिवर्तनीय है (' अगर (std :: cin) ... ')। – UncleBens

संबंधित मुद्दे