"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > क्या आप C ++ में क्लास प्रकार के एक rvalue को असाइन कर सकते हैं?

क्या आप C ++ में क्लास प्रकार के एक rvalue को असाइन कर सकते हैं?

2025-03-24 को पोस्ट किया गया
ब्राउज़ करें:516

] हालाँकि, इस नियम के अपवाद हैं, जैसा कि निम्न कोड द्वारा सचित्र है:

 Can You Assign to an Rvalue of Class Type in C  ?

वर्ग y { जनता: स्पष्ट y (size_t num = 0) {} }; मुख्य प्रवेश बिंदु() { Y (1) = y (0); // क्या?!? रिटर्न 0; }

आश्चर्यजनक रूप से, यह कोड सफलतापूर्वक संकलित करता है, भले ही कंस्ट्रक्टर वाई (1) द्वारा लौटाए गए ऑब्जेक्ट एक rvalue है। यह लेख इस अप्रत्याशित व्यवहार के पीछे के कारणों की पड़ताल करता है। उन कक्षाओं के लिए जो स्पष्ट रूप से एक असाइनमेंट ऑपरेटर को परिभाषित नहीं करते हैं, कंपाइलर एक डिफ़ॉल्ट असाइनमेंट ऑपरेटर उत्पन्न करता है। यह डिफ़ॉल्ट ऑपरेटर एक सदस्य फ़ंक्शन है जो अपने पैरामीटर के रूप में एक ही वर्ग की वस्तु का संदर्भ लेता है। इसका मतलब यह है कि इसे दोनों lvalues ​​(संदर्भित ऑब्जेक्ट्स) और rvalues ​​(अप्रकाशित ऑब्जेक्ट्स) पर लागू किया जा सकता है। यह अस्थायी वस्तु उस कथन के अंत में स्वचालित रूप से नष्ट हो जाती है जिसमें इसे बनाया गया था। हालाँकि, उस मामले में जहां कंस्ट्रक्टर वर्ग प्रकार का एक rvalue लौटाता है, संश्लेषित असाइनमेंट ऑपरेटर अस्थायी ऑब्जेक्ट के जीवनकाल का विस्तार कर सकता है। निम्नलिखित कोड के लिए सिंटैक्टिक चीनी है:

y (1) .operator = (y (0)); इसलिए, कंपाइलर कंस्ट्रक्टर y (1) द्वारा बनाई गई अस्थायी ऑब्जेक्ट के लिए असाइनमेंट स्टेटमेंट की व्याख्या कर सकता है। ये संश्लेषित असाइनमेंट ऑपरेटर कंस्ट्रक्टरों द्वारा बनाई गई अस्थायी वस्तुओं के जीवनकाल का विस्तार करते हैं, जिससे रिवेल्यूज़ को असाइनमेंट की अनुमति मिलती है।
            
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3