कारण [&this]काम नहीं करता है क्योंकि यह एक वाक्यविन्यास त्रुटि है। प्रत्येक अल्पविराम-अलग पैरामीटर lambda-introducerएक है capture:
capture:
identifier
& identifier
this
आप देख सकते हैं कि &thisवाक्य-रचना की अनुमति नहीं है। इसका कारण यह नहीं है कि आप thisसंदर्भ द्वारा कब्जा कभी नहीं करना चाहेंगे , क्योंकि यह एक छोटा कॉन्स्टेंट पॉइंटर है। आप केवल कभी इसे मूल्य से पारित करना चाहेंगे - तो भाषा सिर्फ thisसंदर्भ द्वारा कैप्चरिंग का समर्थन नहीं करती है ।
thisस्पष्ट रूप से पकड़ने के लिए आप के [this]रूप में उपयोग कर सकते हैं lambda-introducer।
पहला जो captureहो सकता capture-defaultहै:
capture-default:
&
=
इसका मतलब है कि मैं जो भी उपयोग करता हूं, उसे संदर्भ ( &) या मूल्य के आधार पर =क्रमशः कैप्चर करता हूं - हालाँकि इसका उपचार thisविशेष है - दोनों ही मामलों में इसे पहले दिए गए कारणों के लिए मूल्य द्वारा कैप्चर किया जाता है (यहां तक कि डिफ़ॉल्ट कैप्चर के साथ &, जिसका आमतौर पर मतलब है संदर्भ द्वारा कब्जा)।
5.1.2.7/8:
नाम देखने (3.4) के प्रयोजनों के लिए, this(9.3.2) के प्रकार और मूल्य का निर्धारण और आईडी-अभिव्यक्तियों को गैर-स्थैतिक वर्ग के सदस्यों का उपयोग करके कक्षा सदस्य अभिगम अभिव्यक्तियों (*this)(9.3.1), यौगिक-कथन [ लैम्ब्डा] को लैम्ब्डा-एक्सप्रेशन के संदर्भ में माना जाता है।
तो लैम्ब्डा कार्य करता है जैसे कि यह सदस्य नामों का उपयोग करते समय संलग्न सदस्य फ़ंक्शन का हिस्सा है (जैसे आपके उदाहरण में नाम का उपयोग x), इसलिए यह thisसदस्य फ़ंक्शन की तरह ही "निहित उपयोग" उत्पन्न करेगा ।
यदि एक लैम्ब्डा-कैप्चर में एक कैप्चर-डिफॉल्ट शामिल है &, जो लैम्ब्डा-कैप्चर में पहचानकर्ताओं द्वारा पहले नहीं किया जाएगा &। यदि एक लैम्ब्डा-कैप्चर में एक कैप्चर-डिफॉल्ट शामिल है =, जो लैम्ब्डा-कैप्चर में नहीं होता है thisऔर इसमें मौजूद
प्रत्येक पहचानकर्ता द्वारा पूर्ववर्ती होगा &। एक पहचानकर्ता या thisलंबोदर-कैप्चर में एक से अधिक बार दिखाई नहीं देगा।
तो अगर आप उपयोग कर सकते हैं [this], [&], [=]या [&,this]एक के रूप में lambda-introducerकब्जा करने के लिए thisमूल्य द्वारा सूचक।
हालाँकि [&this]और [=, this]बीमार हैं। अंतिम मामले में, जीसीसी त्रुटियों के बजाय इसके लिए चेतावनी देता [=,this]है explicit by-copy capture of ‘this’ redundant with by-copy capture default।
thisपरिवर्तित नहीं किया जा सकता है, यह एक संदर्भ को तेज बनाने के लिए पर्याप्त नहीं है ... और वैसे भी , यह वास्तव में मौजूद नहीं है , इसलिए यह है कोई वास्तविक जीवनकाल नहीं है, जिसका अर्थ है कि इसका कोई भी संदर्भ परिभाषा से झूलता रहेगा।thisप्रचलन है, लवलीन नहीं है।