Die Beispiele, die ich gefunden habe, dass Capture this
in einem Lambda es explizit verwenden; 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 dies in g ++ getestet und es kompiliert.
Ist das Standard C ++? (und wenn ja, welche Version) oder handelt es sich um eine Erweiterung?
c++
lambda
this-pointer
Plugwash
quelle
quelle
this->
explizite Verwendung , nämlich sicherzustellen, dass explizit erfasste Werte explizit verwendet werden. Beachten Sie, dass[](){ calstage1done(); }
dies nicht legal wäre, dathis
es nicht erfasst würde. Bei derthis
expliziten Erfassung ist es jedoch überraschend, dass der Funktionskörper auf einen Blick erscheint und den erfassten Wert nicht tatsächlich verwendet :[this](){ calstage1done(); }
.this
und Verwendung in einem Lambda hatte, was auch ein Grund sein könnte, es explizit zu verwendenAntworten:
Es ist Standard und seit C ++ 11, als Lambdas hinzugefügt wurden, so. Laut cppreference.com :
quelle
Es ist völlig Standard und seit der Einführung von Lambdas in C ++ 11.
Sie müssen dort nicht schreiben
this->
.quelle