C++ में एक संदर्भ वापस जाने के लिए हम एक समारोह से एक संदर्भ वापस लौटाना होगा क्या परिदृश्यों कर के तहत है? मैं फंक्शन इनपुट के रूप में संदर्भों का उपयोग करके समझता हूं, लेकिन फ़ंक्शन आउटपुट के लिए, हम केवल मूल्य या पॉइंटर्स क्यों नहीं लौट सकते हैं?जब एक समारोह, C++
उत्तर
संदर्भ कार्यों के मूल्यों वापस जाने के लिए काम उपलब्ध कराने के लिए किया जाता है। अजीब लगता है, लेकिन एक उदाहरण के रूप में सी ++ सरणी असाइनमेंट ऑपरेटर, एक समारोह है कि वास्तव में सूचकांक पैरामीटर पर तत्व के लिए संदर्भ देता है इतना है कि यह को सौंपा जा सकता है जैसे
Array a;
a[4] = 192;
सदा सहायक सी ++ पूछे जाने वाले प्रश्न से प्रेरित होकर:
आप एक संदर्भ लौटा सकते हैं या वस्तु को पहले से ही समारोह में कहा जाता है से पहले से मौजूद है। तो यह कोई समस्या नहीं है।
इस पोस्ट में यह अच्छी तरह से summmarizes। Is the practice of returning a C++ reference variable, evil?
पोस्ट लिंक दूसरी ओर सवाल पर चर्चा करता है, न कि जब हमें संदर्भ वापस करना होगा या संदर्भ लौटने पर पॉइंटर्स लौटने से बेहतर होगा। – ahala
किसी फ़ंक्शन से संदर्भ लौटने पर एक सूचक लौटने के समान फायदे और नुकसान होते हैं।
एक गैर स्थिरांक संदर्भ रिटर्निंग या सूचक फोन करने वाले सदस्य चर को लिखने और गैर स्थिरांक सदस्य कार्यों कॉल करने के लिए अनुमति देता है।
हालांकि, वस्तु बेहतर था की तुलना में फोन करने वाले अन्यथा कार्यक्रम अपरिभाषित व्यवहार के क्षेत्रों में चला जाता है की आवश्यकता है एक जीवन भर नहीं रह गया है कहा जाता है।
के विषय पर एक संदर्भ वापस करना चाहिए, यह ऑपरेटर के साथ सिंटैक्टिक चीनी के लिए उपयोगी है, जो लौटने वाले पॉइंटर्स को कॉलर को पॉइंटर को कम करने की आवश्यकता होगी।
जब कोई कोई नलप्टर लौटाता है;) –
मैं इसके लिए डाउनवोट नहीं करता, लेकिन यह पहला कथन मेरे लिए काफी गलत लगता है। पॉइंटर्स और संदर्भ वास्तव में बंद हैं, लेकिन वे निश्चित रूप से अलग जानवर हैं और फ़ंक्शन रिटर्न संदर्भ में सटीक समान फायदे/नुकसान नहीं हैं। सी ++ एफएक्यू – ereOn
मुझे यकीन नहीं है कि ऐसे स्थान हैं जहां आप एक संदर्भ वापस कर सकते हैं।
ओवरलोडिंग मन में operator++()
स्प्रिंग्स, लेकिन यह अभी भी एक संदर्भ वापस जाने के लिए अनिवार्य नहीं है। सामान्य नियम लागू होते हैं, हालांकि: यदि आप किसी पॉइंटर को किसी चीज़ पर वापस कर सकते हैं, तो आप ज्यादातर मामलों में सुरक्षित रूप से संदर्भ वापस कर सकते हैं। एक चर है कि कार्य करने के लिए स्थानीय है जैसे - मुख्य बात कुछ है कि क्षेत्र से बाहर चला जाता है के लिए एक संदर्भ वापस जाने के लिए नहीं है। *this
का संदर्भ लौटाना काफी आम है।
एक मूल्य लौटने में सक्षम होने के लिए एक मूल्यवान चीज है, क्योंकि यह या तो (ए) लौटाई गई चीज़ की एक प्रति बनाता है, या (बी) मूव सेमेन्टिक्स (सी ++ 11) और/या अधिकतम उपयोग करता है रिटर्न वैल्यू ऑप्टिमाइज़ेशन (RVO on wikipedia)।
आप की जरूरत नहीं है या एक प्रति चाहते हैं, तो मूल्य प्रकार के लिए संदर्भ से लौटने आप क्या चाहते हैं, जब से तुम सूचक की तरह उपयोग, यानी *
या के साथ लौटे बात भिन्नता के लिए होने की संभावना नहीं चाहते हैं आमतौर पर है ->
।
बस याद रखें कि आपको के बाद मौजूद किसी ऑब्जेक्ट का संदर्भ वापस करने की आवश्यकता है, फ़ंक्शन समाप्त हो गया है। उदाहरण के लिए, आप कुछ इस तरह कर सकते हैं:
Val(X,10) = 1;
जहां Val
एक समारोह जो रिटर्न (माना) इस प्रकार यह 1
के लिए सेटिंग एक सूची में 10 वें स्थान तत्व के लिए संदर्भ है।
- 1. एक सरणी एक C++ समारोह
- 2. कैसे एक स्थिरांक समारोह (C++)
- 3. C/C++ समारोह/विधि सजावट
- 4. C++ समारोह नक्शा कार्यान्वयन
- 5. C++ वर्ग समारोह उपनाम
- 6. C++ एकाधिक वंशानुक्रम समारोह
- 7. c - चेतावनी: समारोह 'printf'
- 8. mkdir C++ समारोह
- 9. समारोह छिपने और C++
- 10. कैसे C/C++ एक नाव _mm_extract_ps SSE जीसीसी instrinc समारोह
- 11. C++ समारोह सूचक प्रकार
- 12. C/C++ समारोह शीर्षक में सरणी चर
- 13. admin.firestore एक समारोह जब Node.js
- 14. जब समारोह
- 15. self.context Angular2 में एक समारोह में जब एक घटक समारोह
- 16. C++ समारोह:, स्थिरांक संदर्भ पैरामीटर
- 17. C++ std :: बाँध rebind समारोह
- 18. C++ प्रोग्रामिंग पहेली, समारोह संकेत
- 19. अतुल्यकालिक समारोह कॉल C++ 0x
- 20. C++ 11: एक टेम्पलेट समारोह से एक std :: टपल निर्माण
- 21. जब समारोह दोहराया का उपयोग()
- 22. C++ * बनाम और समारोह घोषणा में
- 23. भागो जावास्क्रिप्ट समारोह जब एक पृष्ठ QML
- 24. माना lua आदेश जब एक सी समारोह
- 25. अपवाद विनिर्देश जब एक आभासी समारोह
- 26. Dragend जब एक iframe ड्रॉप समारोह में
- 27. जब स्मृति एक समारोह (परिभाषा या कॉल)
- 28. प्रदर्शन जब समारोह पैरामीटर
- 29. कॉल समारोह जब ध्वनि
- 30. C++ बंद करने और std :: समारोह
एक सूचक एक संदर्भ नहीं है
निम्नलिखित वाक्य रचना की अनुमति दे? –
@ सैमियम: अगर वे एक ही बात थे और एक ही अर्थ थे, तो आपको क्यों लगता होगा कि वे पहली जगह में भाषा में भी पेश किए गए थे? – ereOn
इस बारे में सोचें कि आप एक संदर्भ वापस किए बिना, 'वेक्टर' के सबस्क्रिप्ट ऑपरेटर को कैसे कार्यान्वित करेंगे। – jrok