2014-05-18 6 views

उत्तर

10

एक छोटे से अभिव्यक्ति को एक छोटे संदर्भ से प्रतिस्थापित करने के लिए उपयोगी है और कोड को और अधिक पठनीय बनाने के लिए उपयोगी है। उदाहरण के लिए:

const int &SphereRadius = Configuration::getInstance()->sphere->radius; 

जब भी विन्यास एक साथ बदल जाता है (एक और धागा में उदा), आपके संदर्भ अद्यतन किया जाता है।

आपके द्वारा दिखाया गया कोड एक बड़ा उपकरण की एक साधारण संभावना है। कई मामलों में आपका उदाहरण व्यर्थ है क्योंकि आप इसे पहले समझ चुके हैं। इस तरह के संदर्भों का मुख्य लक्ष्य किसी ऑब्जेक्ट को अलियासिंग करना है।

  • किसी फ़ंक्शन के संदर्भ में ऑब्जेक्ट पास करना और पॉइंटर्स के भ्रम के बिना रेफरिंग ऑब्जेक्ट को संशोधित करने की क्षमता।

  • एक कंटेनर में पुनरावर्तक आइटम को संशोधित करने के लिए श्रेणी आधारित लूप में उनका उपयोग करना।

  • कुछ मामलों में एक सरल द्वारा अभिव्यक्ति को छोटा करना। और अधिक... ।

5

आप एक rvalue करने के लिए एक गैर स्थिरांक संदर्भ बाध्य नहीं कर सकते हैं, यानी नहीं कर सकते हैं कुछ है कि नहीं देखा जा सकता करने के लिए "संदर्भित" एक असाइनमेंट ऑपरेटर के बाईं ओर (एक अस्थायी वस्तु की तरह)। मुख्य कारण यह है कि जब अस्थायी नष्ट हो जाती है, तो आप एक खतरनाक संदर्भ के साथ समाप्त होते हैं, और सी ++ इसकी अनुमति नहीं देता है। आपका कोड संकलित नहीं होगा।

अजीब बात है, हालांकि, आप एक स्थिरांक संदर्भ के लिए एक अस्थायी बाध्य कर सकते हैं, और इस अस्थायी के जीवनकाल लम्बा होगा, अर्थात

const Foo& ref = Foo(); // creates a temporary Foo, destructor is not invoked now 

हालांकि अस्थायी नष्ट नहीं किया जा रहा है। Does a const reference prolong the life of a temporary? देखें हालांकि मैं इसे अपने कोड में उपयोग नहीं करता, यह केवल हम में से अधिकांश के लिए भ्रम का स्रोत है।

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