C++11里Lambda表达式相关注意点
lambda
允许在函数内部创建一个匿名函数,是能够实现一些小型功能的模块。
函数基本结构如下
[](int a,int b){
return a+b;
}
上是没有指定返回类型的
int main() {
double val = 1.2;
auto add = [&](double a,double b)->int {
return val = a+b+val;
};
std::cout << add(2.2,3.2) << std::endl;
std::cout << "val=" << val << std::endl;
return 0;
}
6
val=6.6
指定了类型所以会进行强制转换,其中
[&] 截取外部作用域的所有变量,并将作为引用在函数体中,所以函数中直接输出的val=6.6;
[] 不截取任何变量;
[=] 截取外部作用域的所有变量,并将其拷贝一份在函数体中使用;
[=,&flag] 截取外部作用域的所有变量,将其拷贝一份在函数体中使用,但是名为flag的变量是作为引用在函数体中使用;
[var] 只截取变量var,将其拷贝一份在函数体中使用;
[this] 截取当前类的this指针。如果已经使用了& 或者=就默认添加此选项。