网站收缩引擎入口深圳建网站的公
在 C++11 中,lambda 表达式可以通过捕获列表来捕获指定的变量。捕获列表是放在 lambda 表达式参数列表之前的一对方括号 [] 中,用来指定 lambda 表达式捕获哪些变量。
捕获列表有以下几种形式:
[]:不捕获任何变量。[&]:以引用的方式捕获所有变量。[=]:以值的方式捕获所有变量。[x, &y]:以值的方式捕获变量x,以引用的方式捕获变量y。[&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 = 2std::cout << "x = " << x << ", y = " << y << std::endl; // 输出 x = 1, y = 3return 0;
}
在这个例子中,我们定义了一个 lambda 表达式 f,通过捕获列表 [x, &y] 捕获了变量 x 和 y。在 lambda 表达式中,我们输出了变量 x 和 y 的值,并对它们进行了修改。在 lambda 表达式执行完毕后,我们再次输出变量 x 和 y 的值,可以看到变量 x 的值没有改变,而变量 y 的值已经被修改了。
总结:
Lambda 表达式捕获变量,值方式与引用方式的不同:
1.值方式捕获变量,该变量可读可写;
2.引用方式捕获变量,该变量仅可读;
