मेरा मानना है कि अभिव्यक्ति T()
एक रैल्यू (मानक द्वारा) बनाती है। हालांकि, निम्नलिखित कोड को संकलित करता है (कम से कम gcc4.0 पर):टी() = टी() क्यों अनुमति है?
class T {};
int main()
{
T() = T();
}
मैं जानता हूँ कि तकनीकी रूप से यह संभव है क्योंकि सदस्य कार्यों temporaries पर लागू किया जा सकता है और इसके बाद के संस्करण बस ऑपरेटर लागू है = rvalue अस्थायी बनाया पर पहले T()
से।
लेकिन अवधारणा यह एक रावल्यू के लिए एक नया मूल्य असाइन करने जैसा है। क्या इसका कोई अच्छा कारण है कि इसकी अनुमति क्यों है?
संपादित करें: कारण मुझे यह अजीब लगता है कि यह अभी तक उपयोगकर्ता द्वारा परिभाषित प्रकारों पर अंतर्निहित प्रकारों पर सख्ती से प्रतिबंधित है। उदाहरण के लिए, int(2) = int(3)
संकलित नहीं होगा क्योंकि यह "असाइनमेंट में अमान्य अंतराल" है।
तो मुझे लगता है कि वास्तविक सवाल यह है कि, क्या यह किसी कारण के लिए भाषा में बनाया गया कुछ असंगत व्यवहार था? या क्या यह कुछ ऐतिहासिक कारणों से है? (उदाहरण के लिए यह अवधारणात्मक रूप से अधिक ध्वनि होगा, केवल रद्दी अभिव्यक्तियों पर केवल कॉन्स्ट सदस्य कार्यों को लागू करने की अनुमति देने के लिए, लेकिन ऐसा नहीं किया जा सकता क्योंकि यह कुछ मौजूदा कोड तोड़ सकता है।)
यह फ्रेडओवरफ्लो के उत्तर के साथ मेरे प्रश्न का पूरी तरह उत्तर देता है। धन्यवाद! – Rimo