c ++中闭包的典型示例如下:
[code1]
#include <iostream>
#include <functional>
std::function<void()> make_closure(){
int i = 0;
return [=]() mutable -> void{i++; std::cout << i << std::endl;};
}
int main(){
auto f = make_closure();
for (int i=0; i<10; i++) f();
}
这将在命令行中显示1,2,.... 10。现在,我很好奇如何在不进行声明和初始化的情况下制作类似闭包的函数,更确切地说,是像下面这样的函数f
:
[code2]
#include <iostream>
void f(){
//some code ... how can I write such a code here?
}
int main(){
for(int i=0; i<10; i++) f();
}
此代码中的f
与[code1]中的工作完全相同。 [code1]和[code2]之间的区别在于,在[code2]中,我们不必通过f
声明和初始化auto f = make_closure();
。
答案 0 :(得分:3)
并非完全相同,但是您将获得与以下相同的输出:
#include<iostream>
#include<functional>
void f(){
static int i = 0;
i++;
std::cout << i << std::endl;
}
int main(){
for(int i=0; i<10; i++) f();
}