【C/C++】C++11 Lambda 表达式捕获变量使用技巧

26 篇文章 1 订阅

在 C++11 中,lambda 表达式可以通过捕获列表来捕获指定的变量。捕获列表是放在 lambda 表达式参数列表之前的一对方括号 [] 中,用来指定 lambda 表达式捕获哪些变量。

捕获列表有以下几种形式:

  1. []:不捕获任何变量。
  2. [&]:以引用的方式捕获所有变量。
  3. [=]:以值的方式捕获所有变量。
  4. [x, &y]:以值的方式捕获变量 x,以引用的方式捕获变量 y
  5. [&x, y]:以引用的方式捕获变量 x,以值的方式捕获变量 y

其中,& 表示以引用的方式捕获变量,= 表示以值的方式捕获变量。方括号中的变量名表示要捕获的变量,多个变量之间用逗号分隔。

例如,以下代码演示了如何在 lambda 表达式中捕获指定变量:

#include <iostream>

int main() {
    int x = 1;
    int y = 2;
    auto f = [x, &y]() {
        std::cout << "x = " << x << ", y = " << y << std::endl;
        x++;
        y++;
    };
    f(); // 输出 x = 1, y = 2
    std::cout << "x = " << x << ", y = " << y << std::endl; // 输出 x = 1, y = 3
    return 0;
}

在这个例子中,我们定义了一个 lambda 表达式 f,通过捕获列表 [x, &y] 捕获了变量 xy。在 lambda 表达式中,我们输出了变量 xy 的值,并对它们进行了修改。在 lambda 表达式执行完毕后,我们再次输出变量 xy 的值,可以看到变量 x 的值没有改变,而变量 y 的值已经被修改了。

总结:
Lambda 表达式捕获变量,值方式与引用方式的不同:
1.值方式捕获变量,该变量可读可写;
2.引用方式捕获变量,该变量仅可读;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值