C++ Lambda函数

一、基本表达方法

Lambda 表达式的基本语法如下: Lambda 表达式由以下部分组成:

捕获列表(Capture clause):用于捕获外部变量,在 Lambda 表达式中可以访问这些变量。捕                    获列表可以为空,也可以包含变量列表 [var1, var2, ...] 。

参数列表(Parameters):与普通函数的参数列表类似,可以为空或包含参数列表 (param1,                 param2, ...) 。

返回类型(Return type):Lambda 表达式可以自动推断返回类型auto,也可以显式指定返回类                 型 -> return_type 。如果函数体只有一条返回语句,可以省略返回类型。

函数体(Body):Lambda 表达式的函数体,包含需要执行的代码。

二、命名示例

#include <iostream>
#include <functional>

int main() {
    // 定义一个Lambda表达式,并将其赋值给auto类型的变量add
    auto add = [] (int x, int y) -> int {
        return x + y;
    };

    // 使用Lambda函数
    int result = add(10, 20);
    std::cout << "Result: " << result << std::endl;

    // Lambda也可以作为参数传递给其他函数
    std::function<int(int, int)> sum = add;
    int another_result = sum(5, 15);
    std::cout << "Another Result: " << another_result << std::endl;

    return 0;
}

三、关于捕获列表的用法

  1. 按值捕获(Value Capture):使用=捕获列表前缀,Lambda会复制外部作用域中的所有变量。这类似于在Lambda表达式的函数体内访问局部变量的副本。

    示例:

    1    int x = 10;
    2    auto lambda = [=]() {
    3    std::cout << x << std::endl; // 访问x的副本
    4    };
  2. 按引用捕获(Reference Capture):使用&前缀,Lambda会直接引用外部作用域中的变量。这允许在Lambda函数体内修改外部变量。

    示例:

    1    int x = 10;
    2    auto lambda = [&]() {
    3    x++; // 直接修改外部作用域中的x
    4    };
  3. 捕获单个变量:在捕获列表中指定具体的变量名,可以按值或按引用捕获。

    示例:

    1    int x = 10;
    2    auto lambda = [x]() {
    3    std::cout << x << std::endl; // 按值捕获x
    4    };
    5
    6    int y = 20;
    7    auto lambda2 = [&y]() {
    8    y++; // 按引用捕获y
    9    };
  4. 捕获this指针:如果在一个成员函数中使用Lambda,并且Lambda需要访问类的成员,可以显式地捕获this指针。

    示例:

    1    class MyClass {
    2    public:
    3    int x;
    4    void myFunc() {
    5        auto lambda = [this]() {
    6            std::cout << this->x << std::endl; // 捕获this指针
    7        };
    8    }
    9    };
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值