Gibt es einen Unterschied zwischen [=] und [&] in Lambda-Funktionen?

8

Ich habe kürzlich die Lambda-Funktion in C ++ 11 studiert. Aber ich weiß nicht, ob es einen Unterschied zwischen [=] und [&] gibt. Wenn ja, was ist der Unterschied?

Und in diesen beiden Situationen hat this im Lambda-Körper einen Unterschied?

    
pktangyue 14.01.2014, 02:42
quelle

3 Antworten

16

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

    
JaredPar 14.01.2014, 02:44
quelle
4
  • & amp; bedeutet "Erfassung durch Referenz".
  • = bedeutet "Erfassung nach 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.

    
Germán Diago 14.01.2014 04:38
quelle
0

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%     
user534498 14.01.2014 03:26
quelle

Tags und Links