匿名函数之Lambda表达式

匿名函数(Anonymous Function)是没有名称的函数。在 C++ 中,匿名函数通常通过 Lambda 表达式 来实现。它是定义并使用函数的一简洁方式,尤其是在需要临时函数时非常有用。

匿名函数的特点:

  1. 没有名称:和传统函数不同,匿名函数没有函数名。
  2. 即用即弃:通常在定义的地方被调用,不需要单独命名和定义函数。
  3. 可以捕捉外部变量:在 C++ 中,匿名函数(通常是 Lambda 表达式)可以通过捕获外部变量(按值或按引用)来使用它们。

C++中的匿名函数(Lambda表达式)

[捕获列表] (参数列表) -> 返回类型 { 函数体 }

示例1:一个简单的匿名函数(Lambda 表达式)

#include <iostream>
using namespace std;

int main() {
    // 定义一个匿名函数并立即调用它
    []() { 
        cout << "This is an anonymous function!" << endl; 
    }(); // 调用匿名函数
    return 0;
}

解释:

  • [] 是捕获列表,表示不捕获任何外部变量。
  • () 是参数列表,表示这个匿名函数没有参数。
  • {} 是函数体,包含匿名函数的代码。

示例2:带参数和返回值的匿名函数

#include <iostream>
using namespace std;

int main() {
    // 定义并调用一个带参数和返回值的匿名函数
    auto add = [](int a, int b) -> int { 
        return a + b; 
    };

    cout << "The sum of 3 and 5 is: " << add(3, 5) << endl;
    return 0;
}

解释:

  • auto add = []:定义一个 Lambda 表达式,并通过 auto 将其赋值给变量 add,使得我们可以通过 add 来调用它。
  • (int a, int b):匿名函数有两个参数 a 和 b。
  • -> int:返回类型是 int,表示这个匿名函数会返回一个整数。
  • { return a + b; }:函数体,实现了两个整数相加的功能。

示例3:匿名函数按值捕获外部变量

#include <iostream>
using namespace std;

int main() {
    int x = 10;
    int y = 20;
    
    // 捕获外部变量并进行操作
    auto add = [x, y]() { 
        return x + y; 
    };

    cout << "The sum of x and y is: " << add() << endl;
    return 0;
}

解释:

  • [x, y] 是捕获列表,表示 Lambda 函数捕获外部变量 x 和 y 的值。
  • 这里没有参数列表,直接在函数体中使用捕获的外部变量 x 和 y 来计算它们的和。

示例4:按引用捕获外部变量

#include <iostream>
using namespace std;

int main() {
    int x = 10;
    
    // 按引用捕获外部变量并修改它
    auto increment = [&x]() {
        x++;  // 修改 x 的值
    };

    increment();  // 调用匿名函数修改 x 的值
    cout << "x after increment: " << x << endl;  // 输出:x after increment: 11
    return 0;
}

解释:

  • [&x] 表示按引用捕获外部变量 x,这意味着在 Lambda 函数内部,我们可以直接修改 x 的值。
  • 调用 increment() 后,x 的值变为 11。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

starleeisamyth

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值