我只是想知道如何在C++中编写一个Lambda函数,它"记住"下次调用它时传入的值?具体来说,我正在考虑i=iPython 的语法如下:
funs = [(lambda i=i: i) for i in range(10)]
Run Code Online (Sandbox Code Playgroud)
如果运行以下代码:
for i in range(len(funs)):
print funs[i]()
Run Code Online (Sandbox Code Playgroud)
结果是:
0
1
4
9
16
Run Code Online (Sandbox Code Playgroud)
我也想知道技术名称(如果存在的话)是什么?(我知道,如果我知道第二个问题的答案,我可以通过Google获得解决方案......)
您可能正在寻找lambdas中的pass-by-value变量捕获.这是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();
}
Run Code Online (Sandbox Code Playgroud)
将打印数字从0到9.
请注意[i]语法.在C++中,您应列出将由lambda函数"看到"的所有局部变量.如果您只是在此处列出变量,则会复制其值.如果你用&(像[&i])列出它,那么它是通过引用传递的.显然,在后一种情况下,当捕获变量超出范围时,lambda将变为无效.
变量是在lambda创建时捕获的.
| 归档时间: |
|
| 查看次数: |
95 次 |
| 最近记录: |