c++ - Wenn „dies“ von einem Lambda erfasst wird, muss es explizit verwendet werden?




this-pointer (2)

Die Beispiele, die ich gefunden habe, die this in einem Lambda erfassen, verwenden es explizit; z.B:

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

Es scheint aber auch möglich zu sein, es implizit zu verwenden. z.B:

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

Ich habe das in g ++ getestet und es kompiliert.

Ist das Standard C ++? (und wenn ja, welche Version), oder handelt es sich um eine Art Erweiterung?


Es ist völlig Standard und seit der Einführung von Lambdas in C ++ 11.

Sie müssen this-> dort nicht schreiben.


Es ist Standard und seit C ++ 11 so, als Lambdas hinzugefügt wurden. Laut cppreference.com :

Zum Zweck der Namenssuche, zum Bestimmen des Typs und des Werts this Zeigers und zum Zugreifen auf nicht statische Klassenmitglieder wird der Hauptteil des Funktionsaufrufoperators des Abschlusstyps im Kontext des Lambda-Ausdrucks berücksichtigt.

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