没有声明和初始化的类似闭包的函数(即没有`auto f = make_closure();`)

时间:2019-01-24 13:01:25

标签: c++ lambda closures

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();

1 个答案:

答案 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();
}