c++ - जब "यह" लंबोदर द्वारा कब्जा कर लिया जाता है, तो क्या इसे स्पष्ट रूप से उपयोग किया जाना है?




lambda this-pointer (2)

जिन उदाहरणों से मैंने पाया है कि इसे लंबोदर में कैद करना स्पष्ट रूप से इसका उपयोग करता है; उदाहरण के लिए:

capturecomplete = [this](){this->calstage1done();};

लेकिन ऐसा लगता है कि इसका उपयोग करना भी संभव है; उदाहरण के लिए:

capturecomplete = [this](){calstage1done();};

मैंने इसे g ++ में जांचा, और इसे संकलित किया।

क्या यह मानक C ++ है? (और यदि हां, तो कौन सा संस्करण), या क्या यह विस्तार का कोई रूप है?


यह पूरी तरह से मानक है और तब से है जब लंबोदा को C ++ 11 में पेश किया गया था।

आपको यह लिखने की आवश्यकता नहीं this-> वहां


यह मानक है और सी ++ 11 के बाद से इस तरह से किया गया है जब लैम्ब्डा को जोड़ा गया था। cppreference.com अनुसार:

नाम देखने के उद्देश्य से, this सूचक के प्रकार और मूल्य का निर्धारण करने और गैर-स्थिर वर्ग के सदस्यों तक पहुँचने के लिए, क्लोजर प्रकार के फ़ंक्शन कॉल ऑपरेटर के शरीर को लैम्ब्डा-अभिव्यक्ति के संदर्भ में माना जाता है।

struct X {
    int x, y;
    int operator()(int);
    void f()
    {
        // the context of the following lambda is the member function X::f
        [=]()->int
        {
            return operator()(this->x + y); // X::operator()(this->x + (*this).y)
                                            // this has type X*
        };
    }
};





this-pointer