intmain(){ //最简单的lambda表达式 []{}; //捕捉当前作用域的变量,没有参数,编译器推导返回值类型。 int a = 1; int b = 2; [=]{return a + b; }; //使用和仿函数差不多 auto fun1 = [&](int c){b = a + c; }; fun1(10); cout << a << " " << b << endl; auto fun2 = [&](int c)->int{return a + c; }; fun2(20); cout << fun2(20) << endl; //传值捕捉 int x = 1; int y = 2; auto add0 = [x, y]()mutable->int{ x *= 2;//捕捉传递传值具有常性 return x + y; }; cout << add0() << endl; auto add1 = [&x, y]()->int{ x *= 2;//捕捉传递引用不具有常性 return x + y; }; cout << add1() << endl; auto add2 = [](int s, int m)->int{ s *= 2;//参数不具有常性 return s + m; }; system("pause"); return0; }
intmain(){ //最简单的lambda表达式 []{}; //捕捉当前作用域的变量,没有参数,编译器推导返回值类型。 int a = 1; int b = 2; //auto fun1 = [x, y]()->int{return x + y; };//编译错误,要和捕捉参数名相同 //传值传递是捕捉变量的拷贝,实际外面的a,b没有交换 auto swap1 = [a, b]()mutable{int z = a; a = b; b = z; }; swap1();//注意还需要调用 cout << a << " " << b << endl; //传引用才能真正修改 auto swap2 = [&a, &b]{int z = a; a = b; b = z; }; swap2(); cout << a << " " << b << endl; return0; }