本文介绍C++的lambda表达式。
lambda表达式有些时候也被称作匿名函数,个人觉得叫lambda表达式更确切一些,毕竟在书写时后面都会跟1个";"来结尾(函数是没有的)。
1.语法规则
lambda表达式一般由以下几部分组成:
[capture list] (parameter list) mutable exception-> return type { function body }
用中文来描述:
[捕获列表] (形参列表) -> 返回值类型
{
函数体;
}
1)捕获列表:必选,lambda表达式访问外部变量(除自己形参以外的变量)时,需指定哪些变量传入及传入方式,捕获方式如下表:
[] | 不捕获任何外部变量,但全局变量和静态变量仍可用 |
[a, b, …] | 以值的方式捕获a,b,... |
[this] | 以值的方式捕获this指针 |
[=] | 以值的方式捕获外部所有变量 |
[&] | 以引用的方式捕获外部所有变量 |
[=, &x] | 以引用的方式捕获外部所有变量x,以值的方式捕获外部其它变量 |
[&, x] | 以值的方式捕获外部所有变量x,以引用的方式捕获外部其它变量 |
2)形参列表:必选,lambda表达式的输入参数,与函数的形参类似
3)返回值类型:可选,返回值类型
4)mutable指示符:可选,是否可以修改按值捕获的变量
5)exception(类型):可选,抛出指定类型的异常
2.例子
以下例子以语句的方式进行呈现,注意末尾的";"
1)捕获为空,返回值为空,形参为空
这是1个最简单的lambda表达式
auto fun = []()
{
};
2)捕获为空,返回值不为空,形参不为空
auto fun = [](int x, int y) -> int
{
return x + y;
};
3)捕获不为空,返回值不为空,形参不为空
int a = 3;
int b = 2;
auto fun = [a, &b](int x, int y) -> int
{
b = 3;
return x + y;
};
这里a以值的方式捕获,b以引用的方式捕获
3.调用方式
int main()
{
int a = 3;
int b = 2;
auto fun = [a, &b](int x, int y) -> int
{
b = 3;
return x + y;
};
int c = fun(3, 2);
std::cout << c << endl;
std::cout << a << endl;
std::cout << b << endl;
return 0;
}
调用方式比较简单,和普通函数调用没太大区别。
总结,本文介绍了C++的lambda表达式。