2010-11-28 18 views
8

this question का उत्तर देते समय मैंने कुछ शोध किया जो वास्तव में मुझे भ्रमित करता है।ऑपरेटर प्राथमिकता (शून्य * बूल से पहले?)

मैंने देखा कि सफल होने वाले दो ifstreams बराबर नहीं हैं लेकिन दो ifstreams विफल हैं। पहले मैंने cplusplus.com की जांच की। operator ! बैडबिट और असफलता की स्थिति देता है। मुझे लगता है कि इसके विपरीत अभी भी इन दो बिट्स की स्थिति वापस करनी होगी, लेकिन फिसल गया।

  • गलत, क्योंकि दो सफल कॉल बराबर नहीं हैं।

तो मुझे लगा कि यह operator bool कहीं ऐसा होगा जो कुछ वापस करेगा। तो मैंने ifstream से बैकट्रैक करने की कोशिश की और istream::operator bool() पाया, जो _Ok लौटा रहा है।

  • फिर भी हालांकि गलत, यह सब पर कहा जा प्रतीत नहीं होता है (और नहीं हो सकता है, क्योंकि दो सफल कॉल अभी भी बराबर नहीं हैं)।

इसलिए मैंने अपना दृष्टिकोण बदल दिया और विजुअल स्टूडियो से डिस्सेप्लोर की जांच की। और मुझे क्या मिल रहा है?
if (file0 != file1) { फोन नहीं करता है operator bool(), बल्कि operator void*() (या वास्तव में __imp_std::ios_base::operator void *)।

तो सवाल मैं रहे हैं ..

  • किसी भी operator bool() सूचक मूल्यों के लिए यह कास्टिंग की कोशिश कर रहा से पहले कहा जा पाया नहीं करना चाहिए?
  • क्या यह operator bool() है क्या मुझे याद आया कि बदले में operator void* पर कॉल किया जा रहा है?
  • क्या यह कुछ अनुकूलन है जिसे मैं समझ नहीं पा रहा हूं?

  • या मैं जो C++ में पूरी तरह से गलत हूँ वास्तव में सोचता है कि void* इस तुलना में bool तुलना में एक बेहतर मैच है?

उत्तर

2

1.) आप कई बार अधिभारित नहीं कर सकते हैं लेकिन अलग-अलग रिटर्न प्रकारों के साथ। 2.) हां, operator! बैडबिट/असफलता देता है, लेकिन operator!operator!= से कुछ अलग है, जो आप उपयोग कर रहे हैं।

+0

आह, हाँ .. मैं देखता हूं। धन्यवाद, मैं यहाँ थक गया हूँ मुझे लगता है। मेरे पास इस पर एक फॉलो अप प्रश्न है :) शायद आप [यह एक] जवाब दे सकते हैं (http://stackoverflow.com/q/4294873/238902 "ऑपरेटर शून्य * और ऑपरेटर बूल दोनों को परिभाषित करें") ..? – Default

+0

हालांकि .. ifstream वास्तव में ऑपरेटर शून्य * को कॉल कर रहा है और ऑपरेटर नहीं! =। – Default

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