यह स्वीकार्य रूप से एक नाइट-पिक्य प्रश्न है जो मुख्य रूप से जिज्ञासा से प्रेरित होता है। मान लीजिए कि हमें निम्नलिखित:क्या होता है जब आप एक रावल संदर्भ के लिए एक शाब्दिक स्थिर आवंटित करते हैं?
int x = 5;
int&& xref = std::move(x);
std::cout << "Before assignment x: " << x << std::endl;
std::cout << "Before assignment xref: " << xref << std::endl;
xref = 10;
std::cout << "After assignment x: " << x << std::endl;
std::cout << "After assignment xref: " << xref << std::endl;
उत्पादन की उम्मीद है:
// Before assignment x: 5
// Before assignment xref: 5
// After assignment x: 10
// After assignment xref: 10
यह समझ में आता है। std::move
x
को एक xvalue में परिवर्तित करता है और हमें इसकी स्मृति स्थान xref
पर बाध्य करने और तदनुसार इसकी सामग्री को संशोधित करने की अनुमति देता है।
int&& xref = 5;
std::cout << "Before assignment xref: " << xref << std::endl;
xref = 10;
std::cout << "After assignment xref: " << xref << std::endl;
int x = 5;
std::cout << "After assignment x: " << x << std::endl;
उत्पादन सहज है:: अब कहते हैं कि हमारे पास निम्न की सुविधा देता है
// Before assignment xref: 5
// After assignment xref: 10
// After assignment x: 5
यह समग्र मतलब। हम लगातार शाब्दिक 5
से xref
पर बाध्य करने में सक्षम होने की उम्मीद करते हैं क्योंकि 5
एक प्रसार है। हम यह भी उम्मीद करते हैं कि xref
उत्परिवर्तनीय हो। हम आगे उम्मीद करते हैं कि निरंतर शाब्दिक 5
का मान संशोधित नहीं है (जैसा उपर्युक्त स्निपेट की अंतिम दो पंक्तियों में कुछ हद तक दिखाया गया है)।
तो मेरा सवाल यह है कि, वास्तव में यहां क्या चल रहा है? C++ निरंतर शाब्दिक 5
के मान को संशोधित करने के बारे में नहीं जानता है, फिर भी यह जानने के लिए xref
के लिए पर्याप्त पहचान बनाए रखें कि इसे 10
असाइनमेंट द्वारा बदला गया है। क्या xref
पर असाइनमेंट पर एक नया चर बनाया जा रहा है जब यह निरंतर शाब्दिक है? यह सवाल सी ++ 03 में कभी नहीं आया क्योंकि केवल कॉन्स संदर्भों को रावलों तक सीमित किया जा सकता है।
धन्यवाद। यह मेरे प्रश्न और हर अनुवर्ती प्रश्न का उत्तर देता जो मैंने किया होगा। – Klam
@ किलम: लाइटनेस इंडस्ट्रीज में यहां सेवा का सभी हिस्सा। –