3,10 Lvalues और rvalues
1 हर अभिव्यक्ति या तो एक lvalue या एक rvalue है।
2 एक लाल्व्यू किसी ऑब्जेक्ट या फ़ंक्शन को संदर्भित करता है। कुछ rvalue भाव-उन वर्ग के या cvqualified वर्ग प्रकार- भी objects.47 को देखें)
3 [ध्यान दें: कुछ builtin ऑपरेटरों और समारोह उपज lvalues कहता है। [उदाहरण: यदि ई पॉइंटर प्रकार की अभिव्यक्ति है, तो * ई ऑब्जेक्ट या फ़ंक्शन का संदर्भ देने वाला एक lvalue अभिव्यक्ति है जिसमें E अंक हैं। एक और उदाहरण के रूप में, फ़ंक्शन int & f(); एक लाभा उत्पन्न करता है, इसलिए कॉल एफ() लैवल्यू अभिव्यक्ति है। ]
- [नोट: कुछ builin ऑपरेटरों lvalue संचालन की उम्मीद है। [उदाहरण: असाइनमेंट ऑपरेटर सभी बाएं हाथ के संचालन को लालसा होने की उम्मीद करते हैं। ] अन्य बिल्टिन ऑपरेटर रावल, उत्पन्न करते हैं और कुछ उन्हें उम्मीद करते हैं। [उदाहरण: यूनरी और बाइनरी + ऑपरेटर रैवल्यू तर्क और उपज रावल परिणाम की उम्मीद करते हैं। ] धारा 5 में प्रत्येक बिल्टिन ऑपरेटर की चर्चा इंगित करती है कि क्या यह लैवल्यू ऑपरेंड और की अपेक्षा करता है चाहे वह उपज है।]
5 एक समारोह वापस नहीं करता है कि एक संदर्भ एक rvalue है बुला का परिणाम है। उपयोगकर्ता परिभाषित ऑपरेटर फ़ंक्शंस हैं, और क्या ऐसे ऑपरेटर अपेक्षा करते हैं या उपज का लाभ उनके पैरामीटर और रिटर्न प्रकारों द्वारा निर्धारित किया जाता है।
6 कोई व्यंजक जो एक अस्थायी एक nonreference प्रकार के लिए एक डाली से उत्पन्न वस्तु धारण एक rvalue (यह एक वस्तु कार्यात्मक अंकन (5.2.3) का उपयोग करने का स्पष्ट निर्माण भी शामिल है) है।
7 जब भी एक संदर्भ में एक लाभा दिखाई देता है जहां एक रैल्यू अपेक्षित है, लालू को एक रैल्यू में परिवर्तित कर दिया जाता है; 4.1, 4.2, और 4.3 देखें।
8 12,2 में 8.5.3 और की temporaries में संदर्भ प्रारंभ की चर्चा अन्य महत्वपूर्ण संदर्भों में lvalues और rvalues की व्यवहार को दर्शाता है।
9 कक्षा के रावजू में प्रकारों को cvqualified हो सकता है; nonclass rvalues हमेशा cvunqualified प्रकार है। रावल हमेशा पूर्ण प्रकार या शून्य प्रकार होगा; इन प्रकारों के अलावा, lvalues में अपूर्ण प्रकार भी हो सकते हैं।
10 एक वस्तु के लिए एक lvalue आदेश सिवाय इसके कि वर्ग प्रकार का एक rvalue भी कुछ निश्चित परिस्थितियों में अपने दिग्दर्शन संशोधित करने के लिए इस्तेमाल किया जा सकता वस्तु को संशोधित करने में आवश्यक है। [उदाहरण: एक ऑब्जेक्ट (9.3) के लिए बुलाया गया एक सदस्य फ़ंक्शन ऑब्जेक्ट को संशोधित कर सकता है। ]
11 कार्यों को संशोधित नहीं किया जा सकता है, लेकिन फ़ंक्शन पर पॉइंटर्स संशोधित हो सकते हैं।
12 एक अधूरा प्रकार का सूचक संशोधित हो सकता है। प्रोग्राम में किसी बिंदु पर पूर्ण होने पर, ऑब्जेक्ट पर सूचक बिंदु भी संशोधित किया जा सकता है।
13 एक constqualified अभिव्यक्ति की दिग्दर्शन संशोधित करेगा नहीं किया जा (कि अभिव्यक्ति के माध्यम से), कि को छोड़कर अगर यह वर्ग प्रकार का है और एक परिवर्तनशील घटक, कि घटक संशोधित किया जा सकता (7.1.5.1) है ।
14 यदि किसी अभिव्यक्ति का उपयोग पर किया जा सकता है, जिस ऑब्जेक्ट को संदर्भित करता है, अभिव्यक्ति को संशोधित कहा जाता है। एक प्रोग्राम जो एक ऑब्जेक्ट को एक गैर-प्रयोज्य lvalue या रावल्यू अभिव्यक्ति के माध्यम से ऑब्जेक्ट को संशोधित करने का प्रयास करता है, वह खराब है।
15 एक कार्यक्रम निम्नलिखित प्रकार व्यवहार undefined48) है में से एक के अलावा अन्य के lvalue के माध्यम से एक वस्तु का संग्रहीत मूल्य तक पहुँचने के लिए प्रयास करता है: - के गतिशील प्रकार वस्तु, - एक cvqualified के संस्करण वस्तु के गतिशील प्रकार, - एक प्रकार है कि हस्ताक्षर किए या अहस्ताक्षरित वस्तु के गतिशील प्रकार करने के लिए इसी प्रकार है, - एक प्रकार है कि पर हस्ताक्षर किए या अहस्ताक्षरित प्रकार का एक cvqualified संस्करण के लिए इसी ऑब्जेक्ट का गतिशील प्रकार, - कुल या संघ प्रकार है कि अपने सदस्यों के बीच ऊपर उल्लिखित प्रकार के एक (सहित, रिकर्सिवली, एक subaggregate के सदस्य या निहित संघ), शामिल हैं - एक प्रकार है कि एक (संभवतः cvqualified) के आधार वर्ग प्रकार है ऑब्जेक्ट का गतिशील प्रकार, - एक char या हस्ताक्षरित चार प्रकार।
मुझे नहीं लगता कि ऐसा कोई रूपांतरण होता है। किसी भी मामले में वे आदिम प्रकार हैं, लेकिन यहां तक कि यदि आपके पास गैर-तुच्छ कन्स्ट्रक्टर थे, तो आपने जो लिखा था वह प्रतिलिपि करेगा, कभी भी चालक कन्स्ट्रक्टर नहीं। –
http://chat.stackoverflow.com/transcript/message/847067#847067 पर चर्चा प्रासंगिक हो सकती है। –
@ केरेक: लेकिन मूल्य का उपयोग करने की आवश्यकता है। ऐसा रूपांतरण कैसे हो सकता है _not_? (और 2003 में कोई चालक कन्स्ट्रक्टर नहीं हैं)। –