2010-06-26 21 views
6

निम्नलिखित कोड कानूनी है?क्या रावल्यू संदर्भ अंतर्निहित रूपांतरण की अनुमति देते हैं?

std::string&& x = "hello world"; 

g ++ 4.5.0 किसी भी समस्या के बिना इस कोड को संकलित करता है।

+0

क्या आप इसके लिए किसी भी दिलचस्प उपयोग मामले के बारे में जानते हैं? मैंने सोचा कि नामित रावलों का एकमात्र कारण विशेष अधिभारों के लिए बाध्यकारी था। – Inverse

+0

@ उलटा: ठीक है, यही कारण है कि मैं वास्तव में पूछ रहा था, कार्यों के लिए तर्क पारित कर रहा था। यह सिर्फ इतना है कि, सवाल पूछने के उद्देश्य से, मैं एक समारोह लिखना और कॉल नहीं करना चाहता था;) तकनीकी रूप से बोलते हुए, नामित रावल्यू जैसी कोई चीज नहीं है (कीवर्ड 'इस' और 'nullptr' को छोड़कर)। आप शायद इस नाम में एक नामित रावल्यू * संदर्भ * - जैसे 'x'' का मतलब है, जो एक लालसा है, न कि एक रावलू। – fredoverflow

उत्तर

5

इस पर वर्तमान में यूज़नेट पर चर्चा की गई है। Rvalue reference example in 8.5/3 correct or wrong? देखें।

यह कानूनी नहीं है।

+0

@ जेरी जो कि "संदर्भ का एक सबबलेट है, एक रेवल्यू संदर्भ होगा और प्रारंभकर्ता अभिव्यक्ति एक रावलू होगी", जो स्ट्रिंग-शाब्दिक संतुष्ट नहीं होती है। –

+0

@ जेरी स्ट्रिंग अक्षर lvalues ​​हैं, जैसे सी में 5.1.1/1 देखें। सादे स्याही के विपरीत, वे वस्तुओं को संदर्भित करते हैं और पॉइंटर्स में कनवर्ट करने की आवश्यकता होती है। इस प्रकार, उनके पास वास्तव में "स्टोरेज लोकेटर वैल्यू" होने की संपत्ति होती है (जो वस्तुओं का संदर्भ लेते हैं)। –

+0

@ जोहान्स: यूप - मुझे 5.1.1/1 नहीं मिला, जो स्पष्ट रूप से ऐसा कहता है। धन्यवाद। यह स्पष्ट रूप से व्याख्या असंभव बनाता है। –

संबंधित मुद्दे