本帖最后由 cdsfiui 于 2016-12-07 23:04 编辑
个人感觉C++11的lambda和C语言本身的函数定义是有冲突的地方。例如函数的局部变量,在函数退出以后,局部变量就消失了。而FP语言里面lambda是对象,其变量是和lambda对象本身生命周期是一样的。
那么问题来了,c++的lambda,传入的形参,以及lambda内部的局部变量,到底是什么生命周期? 我有下面一个小程序: #include<stdio.h> int main() { auto f=[](int input){ int local=3;//这个local变量的生命周期,是在lambda声明末尾,还是整个main函数? return [=](int x){return input+local+x;}; }; auto f1=f(3); auto f2=f(4);
printf("%d,%d\n",f1(2),f2(2)); return 0; } g++ -std=c++11编译运行,输出8,9 符合我对于FP的预期,但是对于C的变量作用域来说,上面这个程序的行为,到底应该是未定义(undefined)还是如我预期的输出8,9?
|