首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

闭包语法的运行结果和小弟我想像的不一样,讨论一下

2012-05-02 
闭包语法的运行结果和我想像的不一样,讨论一下:在mingw9.0下面的Gcc4.6.2运行:$ g++ my.cpp -stdgnu++0xa

闭包语法的运行结果和我想像的不一样,讨论一下:
在mingw9.0下面的Gcc4.6.2运行:
$ g++ my.cpp -std=gnu++0x

a@a-PC ~
$ a
1
2
1
2

a@a-PC ~
$ cat my.cpp

C/C++ code
#include<cstdio>#include<functional>using namespace std;int main(void){  auto closure=[]()  {    int a=0;    return [&](){printf("%d\n",++a);};  };  auto f1=closure();  f1();  f1();  auto f2=closure();  f2();  f1();  return 0;}

我期望的结果是,既然f1和f2都是从闭包里面返回的,那么应该互相不影响,各自操作一个独立的 a,main函数的输出结果是1,2,1,3就对了。
但是看起来f1和f2共用了a变量,使得每次调用closure()的时候a都被重新赋值了0. 以致于打印结果是1,2,1,2

我的理解错在哪里呢?

[解决办法]
没看最新标准关于lambda表达式的描述。我想问的是当出了外层这个闭包的时候 你返回的那个闭包引用的a还能有效吗?恐怕不在有效了吧。
[解决办法]
引用了销毁的堆栈变量。
[解决办法]
a 不是 closure 的堆栈变量??
[解决办法]
你能不能贴些标准就是能够证明在使用返回的lambda表达式的时候他所引用的a还有效呢?

热点排行