lambda函数的方括号内使用[&]似乎还是有对象拷贝,为什么?
我做了一个测试,发现即便方括号里面是[&],也似乎会拷贝对象一次,如下所示,我在函数f里面定义lambda函数lf,[&],但是o的copy ctor还是被调用了一次,程序打印:
copy ctor
1,2,3
这是为什么呢?
- C/C++ code
struct o{ int a; int b; int c; o():a(1),b(2),c(3){} o(const o& oo){ *this=oo; printf("copy ctor\n"); }};void f(o& obj){ auto lf=[&](o ob){printf("%d,%d,%d\n",ob.a,ob.b,ob.c);}; lf(obj);}void main(int argc, char* argv[]){ o o1; f(o1);}[解决办法]
我在这帖子 (http://topic.csdn.net/u/20120410/18/a8b50c4e-cd88-42ec-8fb1-4346774f65cc.html) 刚回了你的问题,怎么同样的问题换个类型又来了?
copy ctor 的调用是因为你 lambda 函数接口的问题,改成这样就行了 [&](o const& ob);。
[解决办法]
&只是说在你的函数体内可以按引用访问当前上下文中的所有变量 而你这个拷贝的是参数 应该改成
- C/C++ code
lf=[](const o& ob)
[解决办法]
[解决办法]
lz先去看清楚lambda的说明吧。[]是声明外部参数的访问方式