Menu
CoddyTech

Lambda 表达式简介

本课属于 Coddy C++ 学习旅程的“逻辑与流程”单元。第 42 课,共 56 课。

Lambda 表达式是 C++ 的强大功能,可以让你在需要的地方创建小型匿名函数。你可以把它们看作迷你函数,无需单独编写函数声明,就能定义并使用它们。

lambda 表达式的基本语法遵循以下模式:[](){}。方括号 [] 称为捕获子句,圆括号 () 用来存放参数(和普通函数一样),花括号 {} 则包含函数体。


捕获子句用于控制 lambda 可以使用外围作用域中的哪些变量。最常见的形式有:

[=]:按值捕获所有局部变量(lambda 会获得变量的副本)
[&]:按引用捕获所有局部变量(lambda 会访问原变量)
[]:不捕获任何变量(lambda 不能使用任何外部变量)

下面介绍如何创建并调用一个简单的匿名函数:

auto myLambda = []() {
    std::cout << "Hello from Lambda!" << std::endl;
};

myLambda();  // 调用 lambda 函数

你也可以不将 lambda 存储在变量中,直接定义并执行它:

[]() {
    std::cout << "Immediate execution!" << std::endl;
}();

Lambda 表达式特别适合用来编写简短的一次性函数,这样你就不必单独定义它们。它们能让代码更简洁,并将相关逻辑放在一起。

challenge icon

挑战

简单

编写一个程序,演示 lambda 表达式的基本语法和执行方式。本挑战将测试你对如何定义和调用不带参数的简单 lambda 函数的理解。

你的程序应该:

  1. 创建一个打印 Hello from Lambda! 的 lambda 表达式
  2. 使用 auto 关键字将这个 lambda 存储在一个变量中
  3. 调用这个 lambda 函数来执行它
  4. 创建第二个打印 Lambda executed successfully! 的 lambda 表达式
  5. 立即执行第二个 lambda,不要将它存储在变量中

请使用以下精确的输出格式:

Hello from Lambda!
Lambda executed successfully!

请记住,lambda 表达式使用 [](){} 这种语法,其中方括号 [] 是捕获子句,圆括号 () 用于放置参数(本挑战中为空),花括号 {} 用于包含函数体。你可以使用 auto variableName = [](){...}; 将 lambda 存储在一个变量中,然后使用 variableName(); 调用它。若要立即执行,可以使用 [](){...}(); 这种语法,在一条语句中定义并调用 lambda。

亲手试试

#include <iostream>
using namespace std;

int main() {
    // TODO:在下面编写你的代码
    // 创建一个输出 "Hello from Lambda!" 的 lambda 表达式
    // 使用 auto 关键字将它存入变量
    
    // 调用这个 lambda 函数
    
    // 创建第二个输出 "Lambda executed successfully!" 的 lambda 表达式
    // 立即执行它,不要存入变量
    
    return 0;
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: C++ 在线编译器