यह एक शुरुआती प्रश्न हो सकता है और समझ सकता है कि कैसे सीओटी काम संभवतः यहां महत्वपूर्ण है। अगर कोई अच्छी व्याख्या से जुड़ सकता है, तो यह बहुत अच्छा होगा। cout<<cout
और cout<<&cout
प्रिंट हेक्स मान लिनक्स x86 मशीन पर 4 से अलग हो गए हैं।cout << cout और cout << और cout में C++ के बीच क्या अंतर है?
उत्तर
cout << cout
cout << cout.operator void *()
के बराबर है। यह idiom C++ 11 से पहले उपयोग किया जाता है यह निर्धारित करने के लिए कि क्या iostream विफलता स्थिति में है, और std::ios_base
में लागू किया गया है; यह आमतौर पर static_cast<std::ios_base *>(&cout)
का पता देता है।
cout << &cout
cout
के पते को प्रिंट करता है।
चूंकि std::ios_base
cout
का वर्चुअल बेस क्लास है, तो यह cout
के साथ अनिवार्य नहीं हो सकता है। यही कारण है कि यह एक अलग पता मुद्रित करता है।
cout<<&cout
स्ट्रीम में cout
का पता भेज रहा है।
cout << &cout
cout
cout
का पता गुजर रहा है।
cout << cout
परोक्ष एक void*
सूचक को cout
कास्टिंग अपने operator void*
का उपयोग कर के मूल्य प्रिंट कर रहा है।
लिंक टूटा हुआ है। – Destructor
मैंने लिंक हटा दिया क्योंकि मुझे उपयुक्त प्रतिस्थापन नहीं मिला। धन्यवाद – GWW
cout << cout
void*
पर अंतर्निहित रूपांतरण का उपयोग कर रहा है जो बूलियन परीक्षण उद्देश्यों के लिए मौजूद है। कुछ अनिच्छुक कारणों से आपका कार्यान्वयन उस पते का उपयोग करता है जो std::cout
ऑब्जेक्ट में 4 बाइट्स है। सी ++ 11 में यह रूपांतरण हटा दिया गया था, और यह संकलित नहीं होना चाहिए।
cout << &cout
std::cout
ऑब्जेक्ट का पता प्रिंट कर रहा है।
जैसा कि पहले ही कहा गया है, cout << cout
bool परीक्षण (while (some_stream){ ... }
, आदि)
यह मूल्य प्रिंट के लिए प्रदान की void*
रूपांतरण का उपयोग करता & अदालत 4 रूपांतरण आधार कार्यान्वयन में किया जाता है, और अपने स्वयं के लिए डाले क्योंकि टाइप करें, यह from libstdc++ है:
operator void*() const
{ return this->fail() ? 0 : const_cast<basic_ios*>(this); }
यहां लोगों के लिए एक उदाहरण है। http://ideone.com/0FZXZ –
वास्तव में क्या प्रश्न है? – Puppy
आप यह क्यों पूछ रहे हैं। सवाल यह नहीं समझता कि ऐसा करने में उनका कोई तर्क नहीं है। –