Os exemplos que eu descobri que a captura this
em um lambda a usam explicitamente; por exemplo:
capturecomplete = [this](){this->calstage1done();};
Mas parece que também é possível usá-lo implicitamente; por exemplo:
capturecomplete = [this](){calstage1done();};
Eu testei isso em g ++, e ele compilou.
Isso é C ++ padrão? (e, em caso afirmativo, qual versão) ou é alguma forma de extensão?
c++
lambda
this-pointer
plugwash
fonte
fonte
this->
explícito, que é garantir que os valores capturados explicitamente sejam usados explicitamente. Observe que[](){ calstage1done(); }
isso não seria legal, porquethis
não seria capturado; mas quando capturandothis
explicitamente, é surpreendente para o corpo da função para aparecer de relance para não realmente usar o valor captado:[this](){ calstage1done(); }
.this
e usá-lo em um lambda que também pode ser uma razão para usá-lo de forma explícitaRespostas:
É padrão e tem sido assim desde C ++ 11, quando foram adicionadas lambdas. De acordo com cppreference.com :
fonte
É completamente padrão e tem sido desde que as lambdas foram introduzidas no C ++ 11.
Você não precisa escrever
this->
lá.fonte