c++ - عندما يتم التقاط "هذا" من قبل لامدا ، هل يجب استخدامه بشكل صريح؟




lambda this-pointer (2)

الأمثلة التي وجدت أن التقاط this في امدا استخدامها بشكل صريح ؛ على سبيل المثال:

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

ولكن يبدو أنه من الممكن أيضًا استخدامه ضمنيًا ؛ على سبيل المثال:

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

اختبرت هذا في g ++ ، وتجميعها.

هل هذا معيار C ++؟ (وإذا كان الأمر كذلك ، ما هو الإصدار) ، أم أنه شكل من أشكال التمديد؟


إنه معيار تمامًا ، وقد تم تقديمه منذ بدء عرض lambdas في الإصدار C ++ 11.

لا تحتاج إلى كتابة this-> هناك.


هو المعيار وقد تم بهذه الطريقة منذ C ++ 11 عندما تم إضافة lambdas. وفقًا لموقع cppreference.com :

لغرض البحث عن الاسم ، وتحديد نوع وقيمة this المؤشر وللوصول إلى أعضاء الفئة غير الساكنة ، يتم النظر في نص مشغل استدعاء دالة نوع الإغلاق في سياق تعبير lambda.

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