概念:C++11中的Lambda表达式用于定义并创建匿名的函数对象,以简化编程工作。
[capture](parameters) mutable->return-type{statement}
- [capture]是引出符,capture捕获列表,捕获的是那些到定义Lambda为止时Lambda所在作用范围内可见的局部变量。
- (parameters)参数列表,与普通函数的参数列表一致的。
- mutable可修改标示符,按值传递函数对象参数时(默认仅读权限),加上mutable修饰符后,可以修改按值传递进来的拷贝(注意是能修改拷贝,而不是值本身)。
- ->return-type返回值类型。
- {statement}函数体,内容和普通函数一样。
注意:
- [ ]标识一个Lambda的开始,这部分必须存在,不能省略。
- ( )参数列表,如果不需要传递参数的话,()可以一同省略。
- 如果使用mutable,参数列表()不能省略的即使参数为空;如果使用mutable,修改拷贝,而不是值本身。
- 返回值类型,如果不需要,->return-type都可以进行省略。
- {函数体}可以使用参数列表,也可以使用捕获列表。
使用:
// 方式一:
auto fun=[](){
qDebug()<<"lambda 被输出打印"; //定义打印输出
};
fun(); //调用函数
// 方式二:
[]{
qDebug()<<"lambada 被输出打印";
}();
打印输出实例:
auto fun=[](int a,int b){
qDebug()<<"lambda 被输出打印为";
return a+b;
};
int sum=fun(100,200);
qDebug()<<sum;
- 空 没有使用任何函数对象参数
- = 函数体内可以使用Lambda所在作用范围内所有可见的局部变量,值传递
- & 函数体内可以使用Lambda所在作用范围内所有可见的局部变量,引用传递
- a 将a按值进行传递
- &a 将a按引用进行传递
- this 函数体内可以使用Lambda所在类中的成员变量
- a,&b 将a按值进行住递,b按引用进行传递。
- =,&a,&b 除a和b按引用进行传递外,其他参数都按值进行传递
- n &, a,b 除a和b按值进行传递外,其他参数都按引用进行传递。