示例
int main()
{
int j {23};
auto byValLambda = [=] { return j + 1;};
auto byRefLambda = [&] { return j + 1;};
cout<<"byValLambda: "<<byValLambda()<<endl; //24
cout<<"byRefLambda: "<<byRefLambda()<<endl; //24
j = j + 6;
cout<<"byValLambda: "<<byValLambda()<<endl; // 24
cout<<"byRefLambda: "<<byRefLambda()<<endl; // 30
}
输出结果
byValLambda: 24
byRefLambda: 24
byValLambda: 24
byRefLambda: 30
总结
对于按值传递,传递的值在lambda定义的时候就已经确认。故byValLambda捕获的j一直为23.
对于按引用传递,传递的值扎起lambda调用的时候确定。故byRefLambda的值第一次为23,第二次为29.