जब आप एक समारोह इस प्रकार लिख ...
const S& f(int i) const { std::cout << i << "\n"; return *this; }
... आप एक const S&
और आप संदर्भित वस्तु सुनिश्चित करने के लिए जिम्मेदारी ले रहे हैं वापस जाने के लिए संकलक निर्देश देते रहे हैं एक जीवन भर फोन करने वाले का के लिए उपयुक्त है उपयोग। ("सुनिश्चित करना" दस्तावेज क्लाइंट उपयोग का गठन कर सकता है जो आपके डिज़ाइन के साथ ठीक से काम करता है।)
अक्सर - हेडर और कार्यान्वयन फ़ाइलों में कोड के सामान्य पृथक्करण के साथ - f(int) const
का कार्यान्वयन कोड को कॉल करने के लिए भी दिखाई नहीं देगा, और ऐसे मामलों में संकलक के पास S
संबंधित कोई संदर्भ नहीं है, और न ही S
एक अस्थायी है या नहीं, इसलिए इसका कोई आधार नहीं है कि यह तय करने के लिए कि जीवनकाल को विस्तारित करने की आवश्यकता है या नहीं।
साथ ही स्पष्ट विकल्प (उदा। ग्राहकों को सुरक्षित कोड लिखने, मूल्य या स्मार्ट सूचक द्वारा लौटने पर भरोसा करना), यह एक अधिक अस्पष्ट विकल्प के बारे में जानने योग्य है ...
const S& f(int i) const & { ...; return *this; }
const S f(int i) const && { ...; return *this; }
&
और &&
ठीक पहले समारोह निकायों को ओवरलोड f
ऐसी है कि &&
संस्करण यदि *this
चल रहा है प्रयोग किया जाता है, अन्यथा &
संस्करण का उपयोग किया जाता है। इस तरह, कोई const &
से f(...)
को बाध्यकारी ऑब्जेक्ट पर बुलाया जाता है, ऑब्जेक्ट की एक नई प्रतिलिपि से जुड़ा होगा और स्थानीय const
संदर्भ के अनुसार जीवनकाल बढ़ाया जाएगा, जबकि जब वस्तु समाप्त नहीं हो रही है (अभी तक) const
संदर्भ होगा मूल वस्तु (जिसे अभी भी संदर्भ के रूप में लंबे समय तक गारंटी नहीं दी जाती है - कुछ सावधानी बरतनी चाहिए)।
स्रोत
2015-09-01 16:53:17
'एफ' एक अंतराल नहीं, एक अंतराल देता है। –
और पूर्ण विवरण के अंत में 'एस()' का जीवनकाल खत्म हो गया। – Jarod42
@KerrekSB लालसा क्यों है? हम '=' के बाईं तरफ 'एफ' नहीं डाल सकते हैं। – alexolut