C++ 面试题 目录

C++ 中什么是 lambda 表达式?

推荐答案

在 C++ 中,lambda 表达式是一种用于定义匿名函数的语法结构。它允许你在代码中直接定义一个函数,而不需要显式地命名这个函数。lambda 表达式通常用于简化代码,尤其是在需要传递函数对象或回调函数的场景中。

一个典型的 lambda 表达式语法如下:

  • capture:捕获列表,用于指定 lambda 表达式如何访问外部变量。
  • parameters:参数列表,与普通函数的参数列表类似。
  • return_type:返回类型,可以省略,编译器会自动推导。
  • {}:函数体,包含 lambda 表达式的执行代码。

本题详细解读

1. 捕获列表(Capture List)

捕获列表用于指定 lambda 表达式如何访问外部变量。捕获列表可以有以下几种形式:

  • []:不捕获任何外部变量。
  • [&]:以引用方式捕获所有外部变量。
  • [=]:以值方式捕获所有外部变量。
  • [&x, =y]:混合捕获,x 以引用方式捕获,y 以值方式捕获。

2. 参数列表(Parameters)

参数列表与普通函数的参数列表类似,用于指定 lambda 表达式接受的参数。例如:

3. 返回类型(Return Type)

返回类型可以显式指定,也可以由编译器自动推导。如果 lambda 表达式的函数体只有一条 return 语句,编译器通常可以自动推导返回类型。例如:

4. 函数体(Function Body)

函数体包含 lambda 表达式的执行代码。它可以包含任意合法的 C++ 代码,包括控制流语句、局部变量等。

5. 示例代码

以下是一个完整的 lambda 表达式示例:

-- -------------------- ---- -------
-------- ----------

--- ------ -
    --- - - ---
    --- - - ---

    ---- --- - --- ------- -- --- -- -- --- -
        - - - - - - --  -- ------ -
        ------ - - - - --  -- ------ -
    --

    --------- -- ----- - -- ------ --- -- ----------  -- -- --
    --------- -- --- - -- - -- ----------  -- -- --

    ------ --
-

在这个示例中,lambda 表达式 sum 捕获了外部变量 xy,并接受两个参数 ab。它修改了外部变量 y 并返回了 x + a + b 的结果。

纠错
反馈