lamda表达式可以被认为是一个匿名的函数,之前不明白为什么C++11中会加入这个特性?匿名的函数能带来什么好处?有名的函数只不过增加了一些函数调用开销而已,无伤大雅。下面开始走进lamda函数的世界。
基本的Lamda函数
int main(int argc, char** argv)
{
auto addfun = [](int _a, int _b)->int
{
return _a + _b;
};
int sum = addfun(4, 5);
cout << "sum=" << sum << endl;
return 0;
}
addfunc就是一个lamda函数,这里使用auto来获取addfunc的类型。其中[ ]表示开始定义lamda函数,紧接着括号里是函数的参数,->后面是返回类型。正常情况下,只要函数中所有return都是同一个类型的话,编译器会自行判断返回类型,也可以通过尾置返回指定类型。
那么lamda函数的形式是什么呢?如下所示:
[captures](params) -> ret {Statments; }
Lamda函数中的变量截取
[ ]不截取任何变量
[&]截取外部作用域中所有变量,并作为引用在函数中使用
[=]截取外部作用域中所有变量,并拷贝一份在函数中使用
[=,&fun]截取外部作用域中所有变量,并拷贝一份在函数中使用,但是对fun变量使用引用
[_y]截取_y变量并拷贝一份在函数中使用,同时不截取其他变量
[this]截取当前类的this指针,如果使用了&或者=就默认添加此选项