lambda 表达式是一种在代码中直接创建匿名函数(即没有名称的函数)的方法。它们特别适用于需要传递给算法或事件处理器的简短、一次性使用的函数。
基本语法
C++ lambda 表达式的基本语法如下:
cpp
[capture](parameters) -> return_type {
// 函数体
};
解释:
[capture]
:捕获列表,用于指定 lambda 表达式中可以访问的外部变量。捕获方式包括值捕获(=
)、引用捕获(&
),或者显式指定捕获的变量。(parameters)
:参数列表,与普通函数的参数列表类似。-> return_type
:可选的返回类型声明,如果省略,编译器会自动推导返回类型。{}
:函数体,包含实际执行的代码。
示例
以下是一些常见的示例:
无参数、无返回值的 lambda 表达式:
cpp
auto myLambda = []() {
std::cout << "Hello, World!" << std::endl;
};
myLambda(); // 输出:Hello, World!
有参数、有返回值的 lambda 表达式:
cpp
auto add = [](int a, int b) -> int {
return a + b;
};
int result = add(3, 4); // result 为 7
使用捕获列表:
cpp
int x = 10;
auto printX = [x]() {
std::cout << "x = " << x << std::endl;
};
printX(); // 输出:x = 10
在这个例子中,x
被值捕获到 lambda 表达式中,即使之后 x
的值发生变化,lambda 表达式中 x
的值仍然保持不变。
C++ lambda 表达式功能强大,常用于 STL 算法中。例如:
cpp
std::vector<int> numbers = {1, 2, 3, 4, 5};
int sum = 0;
std::for_each(numbers.begin(), numbers.end(), [&sum](int n) {
sum += n;
});
std::cout << "Sum = " << sum << std::endl; // 输出:Sum = 15
在这个例子中,sum
通过引用捕获,lambda 表达式会将每个数字累加到 sum
中。