lambda 表达式表示一个可调用的代码单元,可理解为一个未命名的内联函数,其形式如下:
[capture list](parameter list) -> return-type{function body}
capture list :捕获列表,能够捕捉上下文中的变量供 Lambda 函数使用(通常为空);
parameter list : 参数列表,与普通函数的参数列表一致;
return type : 返回类型
function body : 函数体,内容与普通函数一样。不过除了可以使用参数之外,还可以使用所有捕获的变量。
其中,[capture list] 捕获列表的定义方式:
[] 不导入任何变量。
[&] 捕获外部作用域中所有变量,并作为引用在函数体中使用(按引用捕获)。
[=] 捕获外部作用域中所有变量,并作为副本在函数体中使用(按值捕获)。
[=,&foo] 混合使用,按值捕获外部所有变量,并按引用捕获 foo 变量。
[bar] 按值捕获 bar 变量,同时不捕获其他变量。
[this] 捕获当前类中的 this 指针,可以在 lamda 中使用当前类的成员函数和成员变量。
1、this捕获,可以使用当前对象的成员函数sayHello()
[this](){
this->sayHello();
};
2、值捕获,这里使用了外部的info变量
[=]() {
SDKConfInfo(info.toStdString().c_str());
}
3、不捕获,但传递形参a
auto func = [](int a) {std::cout<<a<<std::endl;};
func(9);//输出9