क्या रावल्यू संदर्भ संदर्भों को लटकाने की अनुमति देते हैं?
यदि आपका मतलब है "क्या यह खतरनाक रावल संदर्भों को बनाना संभव है" तो उत्तर हाँ है। आपका उदाहरण, हालांकि,
string middle_name() {
return "Jaan";
}
int main()
{
string&& nodanger = middle_name(); // OK.
// The life-time of the temporary is extended
// to the life-time of the reference.
return 0;
}
बिल्कुल ठीक है। एक ही नियम यहां लागू होता है जो this example (हर्ब सटर द्वारा लेख) को सुरक्षित बनाता है। यदि आप शुद्ध रावल्यू के साथ संदर्भ प्रारंभ करते हैं, तो टेम्पोरी ऑब्जेक्ट का जीवनकाल संदर्भ के जीवनकाल तक बढ़ा दिया जाता है। हालांकि, आप अभी भी लटकने वाले संदर्भों का उत्पादन कर सकते हैं। उदाहरण के लिए, यह अब और सुरक्षित नहीं है:
int main()
{
string&& danger = std::move(middle_name()); // dangling reference !
return 0;
}
क्योंकि std::move
रिटर्न एक string&&
(जो है एक शुद्ध rvalue नहीं) नियम यह है कि के अस्थायी जीवन समय लागू नहीं होता फैली हुई है। यहां, std::move
एक तथाकथित xvalue देता है। एक xvalue सिर्फ एक अज्ञात रैल्यू संदर्भ है। जैसे कि यह कुछ भी संदर्भित कर सकता है और यह अनुमान लगाने के लिए मूल रूप से असंभव है कि एक लौटा संदर्भ संदर्भ के कार्यान्वयन को देखे बिना संदर्भित करता है।
मुझे पहेली है कि आप बाईं तरफ का उपयोग कर सकते हैं, जब यह उपयोगी होगा? –
@ विक्टर: एक रावल्यू संदर्भ अस्थायी रूप से बाध्य हो सकता है और अभी भी संशोधित हो सकता है। जैसे 'int && variable_or_dummy = modified_var? चाल (var): int(); ' – Potatoswatter
एक जिसे आप एक रावल्यू नाम देते हैं, यह मुख्य रूप से 'खतरे' में एक लालसा बन जाता है। rvalueness या lvalueness एक अभिव्यक्ति की एक संपत्ति है –