- 论坛徽章:
- 0
|
20可用积分
我做了一个测试,发现即便方括号里面是[&],也似乎会拷贝对象一次,如下所示,我在函数f里面定义lambda函数lf,[&],但是o的copy ctor还是被调用了一次,程序打印:
copy ctor
1,2,3
这是为什么呢?
- 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);
- }
复制代码 |
最佳答案
查看完整内容
这家伙到现在还没明白,[]中的&和=是表示环境变量们是怎么传入lambdaint a = 0;[](和这里一点关系也没有) { a; }如果[=],那么 lambda中的a 是 外边的a 的传值如果[&],那么 lambda中的a 是 外边的a 的引用
|