推荐答案
在 C++ 中,lambda 表达式是一种用于定义匿名函数的语法结构。它允许你在代码中直接定义一个函数,而不需要显式地命名这个函数。lambda 表达式通常用于简化代码,尤其是在需要传递函数对象或回调函数的场景中。
一个典型的 lambda 表达式语法如下:
[capture](parameters) -> return_type {
// 函数体
}capture:捕获列表,用于指定 lambda 表达式如何访问外部变量。parameters:参数列表,与普通函数的参数列表类似。return_type:返回类型,可以省略,编译器会自动推导。{}:函数体,包含 lambda 表达式的执行代码。
本题详细解读
1. 捕获列表(Capture List)
捕获列表用于指定 lambda 表达式如何访问外部变量。捕获列表可以有以下几种形式:
[]:不捕获任何外部变量。[&]:以引用方式捕获所有外部变量。[=]:以值方式捕获所有外部变量。[&x, =y]:混合捕获,x以引用方式捕获,y以值方式捕获。
2. 参数列表(Parameters)
参数列表与普通函数的参数列表类似,用于指定 lambda 表达式接受的参数。例如:
auto add = [](int a, int b) { return a + b; };3. 返回类型(Return Type)
返回类型可以显式指定,也可以由编译器自动推导。如果 lambda 表达式的函数体只有一条 return 语句,编译器通常可以自动推导返回类型。例如:
auto square = [](int x) -> int { return x * x; };4. 函数体(Function Body)
函数体包含 lambda 表达式的执行代码。它可以包含任意合法的 C++ 代码,包括控制流语句、局部变量等。
5. 示例代码
以下是一个完整的 lambda 表达式示例:
// www.javascriptcn.com code example
#include <iostream>
int main() {
int x = 10;
int y = 20;
auto sum = [x, &y](int a, int b) -> int {
y = y + a + b; // 修改外部变量 y
return x + a + b; // 使用外部变量 x
};
std::cout << "Sum: " << sum(5, 15) << std::endl; // 输出 30
std::cout << "y: " << y << std::endl; // 输出 40
return 0;
}在这个示例中,lambda 表达式 sum 捕获了外部变量 x 和 y,并接受两个参数 a 和 b。它修改了外部变量 y 并返回了 x + a + b 的结果。