2012-08-31 12 views
13

foo लिए Foo& foo = ...; रूप में घोषित किया है, वहाँ पर कब्जा-दर-मूल्य lambdas के लिए और कब्जा-दर-संदर्भ अर्थ विज्ञान के बीच कोई अंतर है?क्या [foo] {...} कैप्चर और [foo] {...} कैप्चर किया गया है यदि 'foo' संदर्भ चर है?

+1

आशा है कि आप स्पष्टता के लिए संपादित आपत्ति नहीं है। – Xeo

उत्तर

12

हाँ, वहाँ एक अंतर है।

§5.1.2 [expr.prim.lambda] p14

एक इकाई प्रतिलिपि द्वारा कब्जा कर लिया है, तो यह परोक्ष कब्जा कर लिया है और कब्जा-डिफ़ॉल्ट= है या अगर यह स्पष्ट रूप से एक पर कब्जा के साथ कब्जा कर लिया है एक & शामिल नहीं है कि। प्रतिलिपि द्वारा कब्जा कर लिया गया प्रत्येक इकाई के लिए, बंद नाम में एक अज्ञात गैरस्टिक डेटा सदस्य घोषित किया जाता है। इन सदस्यों का घोषणा आदेश अनिर्दिष्ट है। इस तरह के एक डेटा सदस्य के प्रकार इसी पर कब्जा कर लिया इकाई के प्रकार यदि इकाई एक वस्तु के लिए एक संदर्भ, या संदर्भित प्रकार अन्यथा नहीं है।

तो, यदि आप एक पहचानकर्ता को कैप्चर करते हैं जो मूल्य के संदर्भ को संदर्भित करता है, तो आपको संदर्भित ऑब्जेक्ट की प्रति प्राप्त होती है।

+0

क्या इसका मतलब यह है कि यह आउटपुट गलत है ?: http://ideone.com/L64Ul – jrok

+2

नहीं, यह ठीक है, क्योंकि वैश्विक चरों तक पहुंच की अनुमति है। आउटपुट 2 होना चाहिए, बशर्ते आप मुझे 0 – JohnB

+0

@ जॉन के साथ प्रारंभ करना न भूलें: धन्यवाद, मैंने कैप्चर और उपयोग किए गए चर के बीच विसंगति को पूरी तरह से अनदेखा कर दिया। अब [अपेक्षित त्रुटि] प्राप्त हो रही है (http://liveworkspace.org/code/6f2da9b2b748758e5563fd424408b334)। इसके अलावा, वैश्विक अंतर्निर्मित प्रकार शून्य-प्रारंभिक हैं। :) – Xeo

16

मुझे लगता है कि आप एक आम गलत धारणा के लिए गिर गए हैं ... वास्तविक वस्तुओं के संदर्भ उपनाम हैं। प्रारंभ करने के बाद, संदर्भ का कोई भी उपयोग मूल वस्तु के उपयोग के बराबर है। यदि आप इसे मानते हैं, तो सवाल थोड़ा समझ में आता है। यदि संदर्भ है वस्तु, तो [foo](){} के व्यवहार चाहे foo एक वस्तु या वस्तु के लिए एक संदर्भ है की परवाह किए बिना बिल्कुल वैसा ही हो जाएगा।

+2

@ एलोफ: मुझे नहीं लगता कि आपने जो कहा वह समझ गया। बेशक एक * प्रति * और एक * संदर्भ * पूरी तरह से अलग चीजें हैं। जो आपको समझ में नहीं आता है वह है कि * प्रारंभिकरण के बाद * संदर्भ मूल वस्तु के लिए ** ** उपनाम ** है। चाहे अंतर्निहित सूचक है या नहीं, अर्थशास्त्र जैसे हैं * मूल * ऑब्जेक्ट का उपयोग किया गया था। आपकी पूरी टिप्पणी ट्रैक बंद है। –

+0

आह, जो अधिक समझ में आता है! क्षमा करें, मैंने आपका जवाब गलत पढ़ा है। मैं अपनी टिप्पणी हटा दूंगा ताकि लोगों को भ्रमित न किया जा सके। – Eloff

+1

@Eloff: अब यह लोगों को भ्रमित करता है क्योंकि वे नहीं देख सकते कि डेविड क्या प्रतिक्रिया दे रहा था। ; -] – ildjarn

संबंधित मुद्दे