2010-06-09 5 views
5

में राजस्व और अस्थायी वस्तुएं मुझे रावल्यू और अस्थायी वस्तु के बीच अंतर को समझने में काफी समय लगा। लेकिन अब पेज 75 पर अंतिम समिति मसौदा कहता है:एफसीडी

एक rvalue [...] एक XValue, एक अस्थायी वस्तु या उसके subobject, या कि एक साथ संबद्ध नहीं है एक मूल्य है वस्तु।

मैं अपनी आंखों पर विश्वास नहीं कर सकता। यह एक त्रुटि होनी चाहिए, है ना?


स्पष्ट करने के लिए है, तो यहां मैं शब्दों को समझने है: prvalue std::string("hello") और lvalue:

#include <string> 

void foo(std::string&& str) 
{ 
    std::cout << str << std::endl; 
} 

int main() 
{ 
    foo(std::string("hello")); 
} 

इस कार्यक्रम में, वहाँ दो भाव है कि एक ही अस्थायी वस्तु निरूपित कर रहे हैं str। अभिव्यक्तियां वस्तुएं नहीं हैं, लेकिन उनका मूल्यांकन एक उत्पन्न कर सकता है। विशेष रूप से, एक प्राप्ति का मूल्यांकन एक अस्थायी वस्तु उत्पन्न करता है, लेकिन एक प्रसार एक अस्थायी वस्तु नहीं है। क्या कोई मेरे साथ सहमत है या मैं पागल हो गया है? :)

+2

आप comp.lang.C++ पर प्रश्न पोस्ट करके सीधे लोगों से पूछने पर विचार कर सकते हैं। Std –

+0

@ नोहा: मैंने किया। चलो देखते हैं कि क्या होता है :) – fredoverflow

+0

[comp.std.C++ थ्रेड से लिंक] (http://groups.google.de/group/comp.std.c++/browse_thread/thread/5cdae718218a462c) – fredoverflow

उत्तर

2

हाँ, मैं आपसे सहमत हूं। यह मेरी राय में तय किया जाना चाहिए, और कई लोगों ने मुझे इस बारे में एक ही सवाल उठाने के लिए गहराई से सम्मान दिया है।

0

यह उतना जटिल नहीं है जितना लगता है। मैं अब अंतिम मानक आईएसओ/आईईसी 14882-2011 का जिक्र कर रहा हूं। पृष्ठ 78 का कहना है:

एक XValue (एक "समाप्त हो रहा है" मूल्य) भी आम तौर पर अपने जीवनकाल के अंत के पास, एक वस्तु को संदर्भित करता है (ताकि अपने संसाधनों से ले जाया जा सकता है, उदाहरण के लिए)। एक xvalue कुछ प्रकार के अभिव्यक्तियों का परिणाम है जिसमें रावल संदर्भ (8.3.2) शामिल हैं।

ऊपर बोल्ड मेरे द्वारा जोड़ा गया है। मानक आगे कहते हैं:

एक rvalue (तथाकथित, ऐतिहासिक, क्योंकि rvalues ​​ एक काम अभिव्यक्ति की दाएँ हाथ की ओर पर दिखाई दे सकता है) एक XValue, एक अस्थायी वस्तु (12.2) या subobject उसके या एक मान जो किसी ऑब्जेक्ट से जुड़े नहीं है।

तो जब आप 'कुछ प्रकार के अभिव्यक्तियों के साथ रावल संदर्भ' के साथ खेल रहे हों तो आपको केवल एक एक्सवल्यू प्राप्त होता है। अन्यथा आपकी अस्थायी वस्तुएं केवल यही हैं - अस्थायी वस्तुएं।

+0

एम्बेडेड प्रश्न हटाया गया। इसे एक और सवाल के रूप में पूछें। – quantum