Der Unterschied besteht darin, wie die Werte erfasst werden
&
erfasst durch Verweis =
erfasst nach Wert Schnelles Beispiel
%Vor%Dieser Code wird gedruckt
%Vor% Das erste Lambda erfasst x
nach Wert an dem Punkt, an dem valueLambda
definiert ist. Daher erhält es den aktuellen Wert von 1
. Aber das refLambda
erfasst einen Verweis auf das lokale, so sieht es den aktuellen Wert
Ich habe hier geantwortet, weil ich auf eines hinweisen möchte:
this
Zeiger wird immer vom Wert erfasst. In C ++ 11 bedeutet dies, dass, wenn Sie eine Kopie einer Variablen in einer Klasse, wie zum Beispiel this->a
, erfassen wollen, diese in der Praxis immer durch Referenz erfasst wird. Warum?
Überlegen Sie:
%Vor% this
wird vom Wert erfasst, aber dies ist ein Zeiger, daher wird a durch this
referenziert.
Wenn Sie eine Kopie einer Membervariable in C ++ 11 möchten, tun Sie etwas wie folgt:
%Vor%Vorsicht vor diesem Vorbehalt, weil es nicht intuitiv ist, bis Sie daran denken.
Die erste Frage, die JaredPar bereits beantwortet hat.
Für Ihre zweite Frage ist das im Lambda-Körper das Gleiche wie das der enthaltenen Klasse. Das folgende Beispiel stammt vom Standard.
%Vor%