मैं वर्तमान में अपनी डिग्री शोध प्रबंध लिख रहा हूं और इसमें सी ++ 11 के पीछे सिद्धांत की कुछ व्याख्या भी शामिल है जो वास्तव में ठीक है क्योंकि सी ++ मेरी प्रोग्रामिंग भाषा पसंद है और मानक मुफ्त में (N3337) मुफ्त में उपलब्ध है अपने आप में खो गया।अस्थायी वस्तुओं xvalues हैं?
फिर भी मैंने नई xvalue श्रेणी को सटीक रूप से और विस्तार से समझाने की कोशिश करते समय एक दीवार मारा है।
यह मेरी समझ है कि एक अस्थायी वस्तु हमेशा एक xvalue है लेकिन मुझे मानक में इसका कोई संदर्भ नहीं मिल रहा है।
यह मेरी समझ है कि फ़ंक्शन की अभिव्यक्ति की मान श्रेणी किसी फ़ंक्शन को कॉल करती है जिसमें गैर-संदर्भ रिटर्न प्रकार होता है, एक xvalue है। मानक कहता है कि "एक xvalue कुछ प्रकार के अभिव्यक्तियों का परिणाम होता है जिसमें रावल-रेफरेंस शामिल होते हैं" जो मुझे परेशान कर रहा है। उदाहरण के लिए:
TestClass { ... };
testClass createObject() { return testClass(); }
void someFunction(TestClass& testClass) { ... }
void someFunction(TestClass&& testClass) { ... }
someFunction(createObject());
ऊपर होगा, के रूप में उम्मीद, अतिभारित समारोह जो पैरामीटर के रूप में एक rvalue-संदर्भ लेता है कहते हैं। फिर भी createObject() एक रैल्यू-रेफरेंस नहीं लौटाता है, यह टेस्ट क्लास टाइप करने का अस्थायी ऑब्जेक्ट देता है। मेरी समस्या अब है, मुझे इसके पीछे कारणों को समझाना है। अभिव्यक्ति "createObject()" का मूल्यांकन क्या करती है? यदि यह वास्तव में एक xvalue है क्योंकि यह एक अस्थायी वस्तु देता है, तो इसके पीछे तर्क स्पष्ट है और ओवरलोड रिज़ॉल्यूशन के दौरान रावल-रेफरेंस का अनुकूलन किया जाता है। यदि ऐसा नहीं होता है, तो मानक के संबंध में इस व्यवहार के लिए स्पष्टीकरण क्या है? क्या कुछ अंतर्निहित रूपांतरण तर्क कहीं परिभाषित किया गया है जो मुझे अभी तक नहीं मिला है?
मैं वास्तव में सराहना करता हूं अगर कोई इस पर मेरी मदद कर सकता है क्योंकि खुदाई और पढ़ने के दिनों के बाद भी, मुझे अभी तक एक ध्वनि स्पष्टीकरण के साथ आने के लिए तैयार नहीं किया गया है। आपका अग्रिम रूप से बोहोत धन्यवाद।
[संबंधित प्रश्न] (http://stackoverflow.com/questions/6609968/) – fredoverflow