C++11中的匿名函数lambda用法
C++11中引用了匿名函数这一个新的特性,它的使用方法如下:
[capture](parameters) -> return_type { body }
其中:
capture
指定了Lambda表达式可以访问的外部变量parameters
是Lambda表达式的参数列表(不需要时可忽略)return_type
是返回类型(有条件可忽略)body
是Lambda函数体
下面是一个简单的例子,演示了Lambda表达式的基本用法:
#include <iostream>
using namespace std;
int main() {
// Lambda 表达式捕获外部变量,并对传入的参数执行加法运算
int a = 5;
int b = 3;
auto sum = [a, b](int x, int y) -> int {
return a * x + b * y;
};
cout << sum(2, 3) << endl; // 输出 19
return 0;
}
在这个例子中,a和b是通过"值捕获"的方式引入的外部变量。Lambda表达式接受两个参数x和y,然后返回表达式a*x+b*y的结果。
此外其中的return type是可以省略的,如果匿名函数内只有一个return并且返回类型是可以被推导的话。但是,如果Lambda函数体中存在多个返回语句,并且这些返回语句返回的类型不一致,或者Lambda函数体中没有返回语句(即返回void
类型),这种情况下就必须显式指定返回类型,而不能省略。
最后,如果Lambda函数不需要parameters传入或者需要忽略参数,你可以在Lambda函数的参数列表的位置使用空的圆括号()
或者完全省略它们。这取决于Lambda函数是否接受参数。