gpt4 book ai didi

C++ Lambdas : capture list vs. 参数列表

转载 作者:IT老高 更新时间:2023-10-28 12:41:46 26 4
gpt4 key购买 nike

根据 C++11 标准,lambda 表达式可以使用封闭范围内的变量,通过捕获列表、参数列表或两者兼而有之。

那么,让我们看看相同代码的两个版本。

1) 带捕获

int x = 4;

cout << "With capture : Factorial of " << x << " = " << [x]() // <= Capture
{
int r = 1;
for (int i = x; i > 1; i--) r = r * i;
return r;
}() << endl;

2) 带参数

int x = 4;

cout << "With parameter: Factorial of " << x << " = " << [](int x) // <= Parameter
{
int r = 1;
for (int i = x; i > 1; i--) r = r * i;
return r;
}(x) << endl;

输出是:

With capture  : Factorial of 4 = 24
With parameter: Factorial of 4 = 24

既然我们可以在参数列表中将参数传递给 lambdas(就像使用任何 C++ 函数一样),为什么我们需要捕获列表?

谁能告诉我参数列表不起作用而只有捕获列表起作用的情况?

最佳答案

例如使用STL算法:

std::vector<int> items;
int factor;
auto foundItem = std::find_if(items.begin(), items.end(),
[&factor](int const& a)
{
return a * factor == 100;
});

在这种情况下,您在 lambda 中为容器中的每个项目调用,如果乘以捕获的因子的值是 100,则返回。代码没有多大意义,它只是向您展示一个捕获和参数列表很重要的示例。

关于C++ Lambdas : capture list vs. 参数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28669941/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com