首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

lambda函数里面,使用&和使用=,效果不是小弟我所想的,很奇怪

2012-04-13 
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.

热点排行