gpt4 book ai didi

c++ - 编写一个 Lambda 函数,将 'remembers' 值传递给它

转载 作者:行者123 更新时间:2023-11-30 01:08:31 26 4
gpt4 key购买 nike

我只是想知道如何用 C++ 编写一个 Lambda 函数,以便在下次调用时“记住”传递给它的值?具体来说,我认为 Python 中的 i=i 语法如下:

funs = [(lambda i=i: i) for i in range(10)]

如果运行以下代码:

for i in range(len(funs)):
print funs[i]()

结果是:

0
1
4
9
16

我还想知道技术名称(如果存在的话)是什么? (我知道,如果我知道第二个问题的答案,我就可以通过谷歌搜索解决方案...)

最佳答案

您可能正在寻找 lambda 中的按值传递变量捕获。这是 C++ 中的默认值。示例:

#include <functional>
#include <iostream>
#include <vector>

int main() {
std::vector<std::function<void(void)>> foo;
for (int i = 0; i < 10; i++)
foo.push_back(
[i](){ std::cout << i << "\n"; }
);
for (const auto &f : foo)
f();
}

将打印从 0 到 9 的数字。

注意 [i] 语法。在 C++ 中,您应该列出所有将被 lambda 函数“看到”的局部变量。如果您只是在此处列出变量,则会复制其值。如果您使用 &(如 [&i])列出它,则它通过引用传递。显然,在后一种情况下,lambda 将变得无效,因为捕获变量超出范围。

变量在创建 lambda 时被捕获。

关于c++ - 编写一个 Lambda 函数,将 'remembers' 值传递给它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42407453/

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