पर संदर्भ तर्क असाइन करना क्या निम्न कोड किसी भी प्रकार के कार्यान्वयन-परिभाषित या अपरिभाषित व्यवहार का आह्वान करता है? मैं अनिश्चित कैसे संदर्भ के साथ बातचीत कर रहा है और मेरी Google कर रहा हूँ/एसओ खोजें खाली आ रहे हैं:स्थानीय चर
struct S {
int i;
};
void Fn(S& s_arg) {
S s_fn{s_arg.i+1};
s_arg = s_fn;
}
int main(int argc, char** argv) {
S s_main{15};
Fn(s_main);
return 0;
}
मैं अनिश्चित जिनमें से दो होने चाहिए हूँ जब काम Fn में होता है:
- एस के डिफ़ॉल्ट प्रति असाइनमेंट ऑपरेटर
s_main
पर शुरू हो जाती है (s_arg
संदर्भ का लक्ष्य किया जा रहा है), डेटाmain
के में (Fn
करने के लिए)s_fn
स्थानीय से कॉपी स्थानीयs_main
(s_arg
संदर्भ, सब कुछ उचित बनाने के माध्यम से और हम ll से परिभाषित। - संदर्भ स्वयं ही असाइन किया गया है और अब
Fn
के स्थानीयs_fn
को संदर्भित करता है।Fn
अब स्थानीय डेटा का संदर्भ लौटा रहा है और कार्यक्रम अबmain
से दूसरे फ़ंक्शन के लिए प्रतीक्षा कर रहा है,Fn
के स्थानीयs_fn
ओवरराइटिंग और सामान्य तबाही का कारण बन रहा है।
आह, मुझे लगता है कि संदर्भों के इलाज के लिए मुझे यही लगता है कि मुझे लगता है कि गौरवशाली पॉइंटर्स के रूप में मुझे लगता है। मुझे लगता है कि वे स्मृति में किसी अन्य क्षेत्र को इंगित नहीं कर सकते हैं क्योंकि इस मामले की तरह संदर्भ का कोई असाइनमेंट हमेशा ऑब्जेक्ट के असाइनमेंट ऑपरेटर को आमंत्रित करता है? – user2555367
@ user2555367: पॉइंटर्स की बजाय उपनाम (दूसरा नाम) के रूप में संदर्भों के बारे में सोचना बेहतर है। –