2012-06-11 95 views
9

मैं उत्सुक हूँ अगर std :: अदालत की वापसी महत्व है, क्योंकि जब मैं यह कर:क्या std :: cout का रिटर्न वैल्यू है?

cout << cout << ""; 

कुछ हेक्सा कोड छपा है। इस मुद्रित मूल्य का क्या अर्थ है?

+1

हालांकि प्रश्न स्वयं (सटीक) सटीक डुप्लिकेट नहीं है, [पिछले प्रश्न] (http://stackoverflow.com/q/7489069/179910) के अधिकांश जवाब यहां भी लागू होते हैं। –

उत्तर

18

को मुद्रित कर ली क्योंकि cout << cout की ऑपरेंड उपयोगकर्ता परिभाषित प्रकार के होते हैं हो सकता है, अभिव्यक्ति प्रभावी रूप से एक समारोह कॉल है। कंपाइलर को सर्वोत्तम operator<< मिलना चाहिए जो ऑपरेटरों से मेल खाता है, जो इस मामले में std::ostream दोनों प्रकार के होते हैं।

कई उम्मीदवार ऑपरेटर ओवरलोड हैं जिन्हें से चुनने के लिए, लेकिन मैं सामान्य ओवरलोड रिज़ॉल्यूशन प्रक्रिया के बाद चयनित होने वाले एक का वर्णन करूंगा।

std::ostream में एक रूपांतरण ऑपरेटर है जो void* पर रूपांतरण की अनुमति देता है। इसका उपयोग स्ट्रीम की स्थिति को बुलियन स्थिति के रूप में परीक्षण करने में सक्षम करने के लिए किया जाता है (यानी, यह काम करने के लिए if (cout) की अनुमति देता है)।

दायां संकार्य अभिव्यक्ति cout परोक्ष इस रूपांतरण ऑपरेटर, तो operator<< अधिभार है कि एक ostream& लेता है और एक void const* इस सूचक मूल्य लिखने के लिए कहा जाता है का उपयोग कर void const* में बदल जाती है।

ध्यान दें कि ostream से void* रूपांतरण के परिणामस्वरूप वास्तविक मान अनिर्दिष्ट है। विनिर्देश केवल तभी जरूरी है कि यदि स्ट्रीम खराब स्थिति में है, तो एक शून्य सूचक वापस आ जाता है, अन्यथा एक गैर-शून्य सूचक वापस आ जाता है।


धारा प्रविष्टि के लिए operator<< भार के एक वापसी मान है: वे धारा है कि एक संकार्य के रूप में प्रदान की गई थी लौट आते हैं। यह प्रविष्टि संचालन की श्रृंखला (और इनपुट धाराओं के लिए, >> का उपयोग कर निकासी संचालन के लिए) की अनुमति देता है।

14

coutमें वापसी मूल्य नहीं है। cout टाइप ostream का एक ऑब्जेक्ट है। operator << में वापसी मूल्य है, यह cout पर एक संदर्भ देता है।

संदर्भ के लिए http://www.cplusplus.com/reference/iostream/ostream/operator%3C%3C/ देखें।

केवल हस्ताक्षर से मेल खाता है है:

ostream & ऑपरेटर < < (ostream & (* पीएफ) (ostream &));

तो यह operator<< सदस्य को सूचक देता है।

जेम्स के जवाब में से एक। :)

+1

मैं यह नहीं देख सकता कि यह कोड "ऑपरेटर के पते को प्रिंट करें <<' फ़ंक्शन "का अर्थात् मूल्यांकन करता है। यह बहुत अधिक संभावना है कि इसका मूल्यांकन '(cout << cout) <<" "के रूप में किया जाता है और आंतरिक कॉल जो भी' शून्य * 'प्रदर्शित होता है जिसे 'cout' रूपांतरित किया जाता है। – cdhowie

1

मुझे विश्वास है कि ostream वस्तु का पता है कि ""

+0

@ ल्यूचियन ने मुझे संदर्भ –

+1

संख्या के साथ हराया, क्योंकि यह संदर्भ को सूचक नहीं देता है। –