c++ lambda表达式
引入
lambda表达式也有人称之为匿名函数,能够在任何作用域下快速定义一个函数
下面这行代码就是一个最简单的lambda表达式,最后输出为3
auto f = [](int x , int y)->int{return x+y;};
cout<<f(1,2);
我们来解析一下lambda表达式
auto f = [](int x , int y)->int{return x+y;};
//[] : 捕获列表,当前为空表示不捕获外围的变量
//(int x , int y): 参数列表。在c++14中可以用auto自动推测参数的类型
//->int : 返回值类型为int,编译器能根据返回值自动推测返回值类型所以可省略
//{return x+y} : 作用域,也是函数的主体
捕获列表
int main()
{
int n = 10,m = 100;
auto f = [n , &m](auto x) //n是按值捕获,此时n是只读的(read-only)不可修改变量的值
{ //m是引用捕获,可以修改变量的值
m = 20;
return n*x;
};
std::cout<<f(10)<<std::endl; //输出100
std::cout<<m<<std::endl; //输出20
return 0;
}
此外
[&] : 引用捕获所有封闭范围中(所处的作用域中)的变量
[=] : 按值捕获所有封闭范围中(所处的作用域中)的变量
在c++14后还可以在捕获语句中定义新的变量
auto f = [n , &m , k = 5](auto x)
{
m = 20;
return n*x;
};