"यदि आप फ़ंक्शन से कोई मान (संदर्भ नहीं) वापस करते हैं, तो इसे कॉलिंग फ़ंक्शन में एक कॉन्स्ट संदर्भ में बाध्य करें, इसका जीवनकाल कॉलिंग फ़ंक्शन के दायरे तक बढ़ाया जाएगा।"कॉलिंग फ़ंक्शन में किसी कॉन्स संदर्भ के लिए बाध्य होने पर कॉलिंग फ़ंक्शन के दायरे में विस्तारित मूल्य का उसका जीवनकाल कैसा रहता है?
तो: मामला एक
const BoundingBox Player::GetBoundingBox(void)
{
return BoundingBox(&GetBoundingSphere());
}
समारोह से प्रकार const BoundingBox
का मान देता है GetBoundingBox()
संस्करण मैं: संस्करण द्वितीय (यह बाइंड एक स्थिरांक संदर्भ के लिए)
const BoundingBox& l_Bbox = l_pPlayer->GetBoundingBox();
: (इसे एक कॉन्स कॉपी से बांधें)
const BoundingBox l_Bbox = l_pPlayer->GetBoundingBox();
दोनों ठीक काम करते हैं और मुझे l_Bbox
ऑब्जेक्ट को दायरे से बाहर नहीं देखा जाता है। (हालांकि, मैं एक प्रकार में समझता हूं, कॉपी कन्स्ट्रक्टर नहीं कहा जाता है और इस प्रकार संस्करण II से थोड़ा बेहतर है)।
इसके अलावा, तुलना के लिए, मैंने निम्नलिखित परिवर्तन किए हैं।
मामला बी
BoundingBox Player::GetBoundingBox(void)
{
return BoundingBox(&GetBoundingSphere());
}
प्रकार के साथ
: मैं
BoundingBox& l_Bbox = l_pPlayer->GetBoundingBox();
और द्वितीय:
BoundingBox l_Bbox = l_pPlayer->GetBoundingBox();
वस्तु l_Bbox
अभी भी गुंजाइश बाहर जाना नहीं है। कॉलिंग फ़ंक्शन में इसे एक कॉन्स्ट संदर्भ में कैसे बांधता है, इसका जीवनकाल कॉलिंग फ़ंक्शन के दायरे तक बढ़ाया जाएगा ", वास्तव में ऑब्जेक्ट का जीवनकाल कॉलिंग फ़ंक्शन के दायरे में बढ़ाता है?
क्या मुझे यहां कुछ मामूली याद आ रही है?
तथ्य यह है कि यह आपके विशिष्ट कंपाइलर (जो है, बीटीडब्ल्यू ...?) पर काम करने लगता है इसका मतलब यह नहीं है कि यह किसी अन्य कंपाइलर पर काम करने जा रहा है, न कि यह अच्छी तरह से परिभाषित और कानूनी है। –
@ पीटर: मैं एमएसवीसी 2008 का उपयोग कर रहा हूं। मुझे क्या बच निकलता है क्यों/जीवनकाल को विस्तारित करने पर कोई प्रभाव नहीं पड़ सकता है। मेरी राय में, यह किसी को वस्तु (कॉन्स शुद्धता इत्यादि) में परिवर्तन करने से रोकता है और यह है .. – brainydexter
आपका संस्करण मैं थोड़ा मजाकिया दिखता हूं - क्या आपका कंपाइलर वास्तव में शिकायत के बिना स्वीकार करता है?ऐसा लगता है कि आप एक रावल्यू के साथ गैर-कॉन्स के संदर्भ को प्रारंभ कर रहे हैं, जिसे अनुमति नहीं दी जानी चाहिए। –