उस मामले को ध्यान में रखते हुए जहां कोई कॉपी-एलीशन शामिल नहीं है (पूर्व सी ++ 17)।MyClass obj = MyClass(); क्या 'MyClass()' यहां एक अस्थायी वस्तु का संदर्भ देता है?
cppreference से (फिर से, लगता है सी ++ 14):
- एक prvalue
- से एक prvalue लौटने के लिए एक संदर्भ बाध्यकारी:
अस्थायी वस्तुओं निम्न स्थितियों में बनाए जाते हैं एक समारोह
- रूपांतरण जो एक प्रावधान बनाता है
- लैम्ब्डा अभिव्यक्ति
- कॉपी-आरंभीकरण कि प्रारंभकर्ता
- सूची-प्रारंभ है कि एक अलग लेकिन परिवर्तनीय प्रकार करने के लिए या एक bitfield के लिए एक std :: initializer_list
- संदर्भ-प्रारंभ निर्माण के रूपांतरण की आवश्यकता है। BTW मैं इस तरह के हालात में बयान समझ में नहीं आता कि temporaries के अंत में नष्ट कर रहे हैं बाध्यकारी शैली संदर्भ (
int &&x = 5;
-
सभी पहले एक को छोड़कर मामलों अप्रासंगिक हैं, तो पहले एक मतलब करने के लिए सी ++ लगता है पूर्ण अभिव्यक्ति ..., जिस ऑब्जेक्ट 5 का जिक्र है, वह कथन के अंत में नष्ट नहीं होता है)।
इसलिए, जैसा कि मैंने समझा, एक अस्थायी वस्तु की धारणा में केवल उन लोगों को शामिल किया गया है जिन्हें संग्रहीत करने की गारंटी है (जो संभावित स्थिति के कारण मेरी स्थिति में मामला नहीं है)। क्या मैं सही हूँ? अन्यथा मैं यहां क्या गलत समझ सकता हूं?
BTW वहाँ MyClass()
और 4
int x = 4;
में (या int x = 2 + 2;
में 2 + 2
) के बीच कोई अंतर है? शायद मैं गलत हूं और पहला व्यक्ति एक अस्थायी वस्तु का संदर्भ देता है जबकि अन्य दो नहीं ...
यह "रूपांतरण है कि एक prvalue बनाता है" मामले के तहत गिना जाता है नहीं करना चाहिए। (हाँ, यह एक रूपांतरण की तरह नहीं दिखता है, लेकिन मानक समूह 'टी()', 'टी (1)', और 'टी (1,2) 'एक साथ।) –
@ टी.सी. तो क्या ऐसी चीज केवल 'MyClass()' मामले के लिए अस्थायी है? एक उदाहरण के रूप में प्रस्तावित '4' के लिए नहीं? तो इस तरह के अंतर के लिए तर्क क्या है? हो सकता है कि आप एक उत्तर बना सकें? .. आपको लगता है कि आप पहले से मौजूद एक विरोधाभास को मानते हैं .. – ledonter
क्या 4 अभी भी "रूपांतरण जो एक प्रावधान बनाता है" द्वारा कवर नहीं किया जाएगा? इस मामले में यह पूर्णांक पूर्णांक से, एक अभिन्न पूर्णांक में रूपांतरण है। –