推荐答案
在 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 表达式示例:
-- -------------------- ---- ------- -------- ---------- --- ------ - --- - - --- --- - - --- ---- --- - --- ------- -- --- -- -- --- - - - - - - - -- -- ------ - ------ - - - - -- -- ------ - -- --------- -- ----- - -- ------ --- -- ---------- -- -- -- --------- -- --- - -- - -- ---------- -- -- -- ------ -- -
在这个示例中,lambda 表达式 sum
捕获了外部变量 x
和 y
,并接受两个参数 a
和 b
。它修改了外部变量 y
并返回了 x + a + b
的结果。