The difference is how the values are captured
&
captures by reference=
captures by value
Quick example
int x = 1;
auto valueLambda = [=]() { cout << x << endl; };
auto refLambda = [&]() { cout << x << endl; };
x = 13;
valueLambda();
refLambda();
This code will print
1
13
The first lambda captures x
by value at the point in which valueLambda
is defined. Hence it gets the current value of 1
. But the refLambda
captures a reference to the local so it sees the up to date value