终于明白错在哪里了,闭包变量i的内存已经被回收,下面为了让程序勉强能正常运行,就用了static变量保存i:
#include <functional>
#include <iostream>
int main(int argc,char* argv[]){
std::function<std::function<int()>(int)> rclouse = [](int i) {
static int t = i;return [&](){ return ++t;};
};
typedef decltype(rclouse) NewFun;
std::cout<<typeid(NewFun).name()<<std::endl;
std::function<int()> seed3 = rclouse(3);
std::cout<<seed3()<<std::endl;
return 0;
}
输出:4
但还是有个疑问:如果rclouse写成[&t](){ return ++t;} VC就会明确报错提示不能捕获静态存储时间的static变量t,但如果写成[](){ return ++t;}或者[&](){ return ++t;}就能正常运行。
为什么能直接在闭包中捕获外面的static变量?