लगता है मैं एक समारोह जो स्थिरांक संदर्भ तर्क पारित स्वीकार करने के लिए गैर स्थिरांक तर्क पारितC++ समारोह:, स्थिरांक संदर्भ पैरामीटर
int func(const int &i)
{
/* */
}
int main()
{
int j = 1;
func(j); // pass non const argument to const reference
j=2; // reassign j
}
इस कोड को सी ++ प्राइमर को fine.according काम करता है, क्या इस तर्क को यह कार्य करने के लिए पारित करने है इस प्रकार की तरह,
int j=1;
const int &i = j;
जिसमें मैं j के एक पर्याय (उपनाम) है,
मेरे सवाल यह है: अगर मैं j के एक पर्याय है, और मैं स्थिरांक के रूप में परिभाषित किया गया है, मैं रों कोड:
const int & i = j
एक गैर स्थिरांक चर redelcare चर const के लिए? सी ++ में यह अभिव्यक्ति कानूनी क्यों है?
आपका मतलब है कि संदर्भ वस्तु ही नहीं है। तो कैसे समझें कि मैं जम्मू का समानार्थी हूं? क्या इसका मतलब है कि मैं और जे एक ही वस्तु हैं, क्योंकि मैं और जे दोनों का एक ही भौतिक पता है? – fuyi
मैं वस्तु जे के लिए एक वैकल्पिक संदर्भ है। तो एक समानार्थी। हालांकि आपने कहा है कि आप जिस वस्तु का जिक्र कर रहे हैं उसे बदलने के लिए 'i' का उपयोग नहीं कर सकते हैं। कुछ भी नहीं कहता है कि आप जिस ऑब्जेक्ट को संदर्भित करते हैं उसे संशोधित करने की किसी अन्य विधि का उपयोग नहीं कर सकते हैं। आप उस घोषणा के साथ मेरी क्षमताओं को सीमित कर रहे हैं, उन्हें विस्तारित करने की कोशिश नहीं कर रहे हैं, और यह ठीक है। –
@xiaopang: ''i'' और '' j'' नाम हैं। वे दोनों एक ही वस्तु का उल्लेख करते हैं। अक्सर हम कहते हैं कि इसका नाम "है", या वह नाम "वस्तु" है। उदाहरण के लिए मैं कह सकता हूं "मैं स्टीव हूं"। लेकिन यह अपरिहार्य शब्दावली है, दोनों एक ही बात नहीं हैं। मैं यह भी कह सकता हूं, "स्टीव 'पूंजी' एस 'से शुरू होता है। इसका मतलब यह नहीं है कि * मैं * पूंजी 'एस' से शुरू होता हूं। 'स्टीव' के चारों ओर उद्धरण यह इंगित करने के लिए हैं कि मैं नाम के बारे में बात कर रहा हूं, न कि जिस वस्तु को संदर्भित करता है। 'i' और' j' समानार्थी हैं क्योंकि वे दोनों एक ही वस्तु के नाम हैं, लेकिन उनके गुणों के नाम अलग हैं। –