示例
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.
本文详细分析了C++中按值传递和按引用传递的lambda函数在j值变化时的不同行为:按值传递的lambda捕获的是常量,而按引用传递则随函数调用实时更新。通过实例展示了两者在输出上的区别。
366

被折叠的 条评论
为什么被折叠?



