Lambda表达式的基本构成:
[函数对象参数](操作符重载函数参数)mutable ->返回值{函数体};
第一个 [ ]参数:
Lambda的开始,这部分必须存在,不能省略
空。没有使用对象参数
=。值传递方式,相当于编译器自动为我们按值传递了所有局部变量(lambda所在作用范围)
&。引用传递,相当于编译器自动为我们按引用传递了所有局部变量
this。函数体内可以使用Lambda所在类中的成员变量。
a。将a按值进行传递
&a。将a按引用进行传递
&b,a。将b按引用进行传递,将a按值进行传递
第二个参数 ( )
操作符重载函数参数
重载的()操作符的参数,省略时即没有参数
第三个参数 mutable
可修改标示符,可以省略
第四个参数 ->返回值类型
函数返回值
当返回值为void,可省略
第五参数 {}
是函数体,不可省略
代码讲解:
值传递
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<math.h>
using namespace std;
class test
{
public:
test()
{
[=]() {
m = 10;
b = 11;
int a = m + b;
cout <<"a:"<< a << endl;
};
}
void printf_test()
{
cout << "b: " << b << " m: " << m << endl;
}
public:
int m=0;
int b=0;
};
int main(void)
{
test a;
a.printf_test();
system("pause");
return EXIT_SUCCESS;
}
输出
为什么没有输出a,[](){}只有声明,没有实现
当test改成[](){}();
test()
{
[=]() {
m = 10;
b = 11;
int a = m + b;
cout <<"a:"<< a << endl;
}();
}
就可以输出了
当需要返回值时
void test1()
{
int m = 0;
int b = 0;
int sum = 0;
sum=[&,b]() ->int {
m = 10 + 240;
int a = m + b;
m = a;
return a;
//cout << "a:" << a << endl;
}();
cout << "b: " << b << " m: " << m <<" sum:"<< sum << endl;
}
->int 可以省略