Les exemples que j'ai trouvés que la capture this
dans un lambda l'utilisent explicitement; par exemple:
capturecomplete = [this](){this->calstage1done();};
Mais il semble qu'il soit également possible de l'utiliser implicitement; par exemple:
capturecomplete = [this](){calstage1done();};
J'ai testé cela en g ++, et il a compilé.
Est-ce du C ++ standard? (et si oui, quelle version), ou s'agit-il d'une forme d'extension?
c++
lambda
this-pointer
plugwash
la source
la source
this->
explicitement, qui est de s'assurer que les valeurs explicitement capturées sont utilisées explicitement. Notez que[](){ calstage1done(); }
ce ne serait pas légal, carthis
ne serait pas capturé; mais lors de la capturethis
explicitement, il est surprenant pour le corps de la fonction semble un coup d' oeil de ne pas utiliser réellement la valeur capturée:[this](){ calstage1done(); }
.this
et son utilisation dans un lambda, ce qui pourrait également être une raison de l'utiliser explicitementRéponses:
C'est standard et c'est le cas depuis C ++ 11 lorsque les lambdas ont été ajoutés. Selon cppreference.com :
la source
C'est tout à fait standard et ce depuis que lambdas a été introduit en C ++ 11.
Vous n'avez pas besoin d'
this->
y écrire .la source