lambda函数里面,使用&和使用=,效果不是小弟我所想的,很奇怪
lambda函数里面,使用&和使用,效果不是我所想的,很奇怪!我定义一个vector,然后循环让每个vector的元素加上
lambda函数里面,使用&和使用=,效果不是我所想的,很奇怪!
我定义一个vector,然后循环让每个vector的元素加上2.下面这段代码没有问题(VC2010)
C/C++ code#include<algorithm>#include<iostream>#include<iterator>#include<string>#include<vector>using namespace std;void main(){ int add=2; vector<int> vi; vi.push_back(1); vi.push_back(2); for_each(vi.begin(),vi.end(),[=](int& i){i+=add;}); copy(vi.begin(),vi.end(),ostream_iterator<int>(cout,","));}
程序运行打印3,4
但是如果我把lambda函数改成
for_each(vi.begin(),vi.end(),[&](int i){i+=add;});
那么copy那一行的打印结果就是1,2,说明vector的元素没有被修改
这是为什么呢? 我在声明lambda函数的时候已经用了[&],那么后面的int i就不需要再用引用了吧?
我的想法错在哪里?
[解决办法][&]指的是引用add 和 vi,这2个变量。
[解决办法](int& i) 是必须的,(int i) 的时候 i+=add 只是自增 vi 每个元素调用 lambda 时产生的副本。就好像一个普通函数,要想修改传入参数时需要用 non-const reference type.