यह व्यवहार तब समझना आसान होता है जब हम देखते हैं कि जब हम अस्थायी वस्तु के संदर्भ को बाध्य करते हैं तो क्या होता है। अगर हम
const int& reference_to_const_int = 20; //A temporay object int(20) is created.
लिखने संकलक कुछ इस तरह में कोड ऊपर बदल देती है:
int temp = 20;
const int& reference_to_const_int = temp;
तो reference_to_const_int const नहीं कर रहे थे, तो हम एक नया मान reference_to_const_int को आवंटित कर सकते हैं। ऐसा करने से शाब्दिक 20 नहीं बदलेगा, बल्कि बदले में अस्थायी वस्तु होगी, जो अस्थायी वस्तु है और इसलिए पहुंच योग्य नहीं है। केवल स्थिर संदर्भों को अनुमति देने के लिए अस्थायी संदर्भों को अनुमति देना अस्थायी रूप से समस्या को टालता है क्योंकि एक कॉन्स संदर्भ केवल पढ़ने के लिए होता है।
क्यों सी ++ अस्थायी वस्तुओं या RVALUES (जैसे शाब्दिक) स्वीकार करने के लिए कॉन्स संदर्भों की अनुमति देता है?
संदर्भों को देखने वाले सबसे आम स्थान फ़ंक्शन तर्क या वापसी मान के रूप में हैं। जब किसी फ़ंक्शन तर्क के रूप में संदर्भ का उपयोग किया जाता है, तो फ़ंक्शन के अंदर संदर्भ में कोई भी संशोधन फ़ंक्शन के बाहर तर्क में परिवर्तन का कारण बनता है।
यदि फ़ंक्शन अस्थायी वस्तुओं या अक्षरों को इनपुट के रूप में स्वीकार/स्वीकार कर सकता है और यदि फ़ंक्शन ऑब्जेक्ट की कॉन्स्ट-नेस का सम्मान करता है, तो तर्क को एक कॉन्स्ट संदर्भ बनाने से फ़ंक्शन को सभी परिस्थितियों में उपयोग करने की अनुमति मिल जाएगी।
अस्थायी वस्तुएं हमेशा स्थिर होती हैं, इसलिए यदि आप एक कॉन्स्ट संदर्भ का उपयोग नहीं करते हैं, तो यह तर्क संकलक द्वारा स्वीकार नहीं किया जाएगा।
void f(int&) {}
void g(const int&) {}
int main()
{
//f(1); //Error
g(1); //OK
}
स्रोत
2012-10-03 15:39:58
पढ़ें यह: http://herbsutter.com/2008/01/01/gotw-88-a-candidate-for-the-most-important-const/ –
उसे कुछ अतिरिक्त सोचा देते हुए यह ऐसा लगता है कि यह * कानूनी होना चाहिए। यदि यह नहीं था, तो आप कभी भी अधिक चर बनाने के बिना इसे सेट करने में सक्षम नहीं होंगे। –
@ गीगावाट: "यह" आप किस बारे में बात कर रहे हैं? मेरा विश्वास करो, अगर "यह" * कानूनी होना चाहिए, तो यह * होगा। :) –