c++ lambda this-pointer

c++ - Cuando "esto" es capturado por una lambda, ¿tiene que usarse explícitamente?



this-pointer (2)

Es completamente estándar y lo ha sido desde que las lambdas se introdujeron en C ++ 11.

No necesita escribir this-> allí.

Los ejemplos que he encontrado que capturan this en una lambda lo usan explícitamente; p.ej:

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

Pero parece que también es posible usarlo implícitamente; p.ej:

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

Probé esto en g ++, y lo compilé.

¿Es este estándar C ++? (y si es así, ¿qué versión), o es alguna forma de extensión?


Es estándar y ha sido así desde C ++ 11 cuando se agregaron lambdas. De acuerdo con cppreference.com :

Para fines de búsqueda de nombres, determinar el tipo y el valor de this puntero y para acceder a miembros de clase no estáticos, el cuerpo del operador de llamada de función del tipo de cierre se considera en el contexto de la expresión 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* }; } };