Lambda表达式
跟着一个博客学习QT,提到了这个Lambda表达式,想搞清楚。百度百科了一下,有点明白,又有点不明白
[capture list] (parameter list) ->return type { function body }
【捕获列表】(函数所需参数列表){函数主体}这部分我感觉我可以理解了
但是那个捕获列表干嘛用的就搞不懂了。(难道是检测捕获列表里的所有变量,一旦全部被使用就跳转过来执行Lambda表达式?我看C#里面的=》就叫做goes to 所以猜想是不是和go to有联系)
然后后面这一部分就真的变成天书,看不懂。。。
1.第一行的捕获列表x在那个时刻不是还没定义吗?怎么就用了?还是说他是形参,不对,也没有声明类型啊?
2.第三行的捕获列表怎么只有一个&,神马意思?
3.第三行的函数定义的形参明明是X,函数内部修改的却是y,Lambda表达式不是一个独立的函数吗?他怎么能用main()的变量?如果他和Main共享变量名域,那么为什么又声明了一个x,是不是这个x算局部变量,覆盖了更高的x,这么做的意义何在?
5.第三行注释说要注意y的生存期,难道里面的Y还是和外面的不一个?执行完第3行以后全局y还是1?
4.第四行的代码是不是等价于#define fp(a,b) ((a)>(b)) ?具体说就是声明了一个函数指针fp,指向一个需要两个int参数的函数。那么Lambda表达式的返回值就是它自身所在地址,而return a>b就是Lambda里面那个函数的返回值。
6.我复制这段代码进IDE ,编译报错一大堆。总的来说比如第一行的第一个x未定义,第二个x未捕获,然后每行最后面都多了一个右括号
E:\pta 数据结构与算法\test.cpp In function 'int main()':
12 11 E:\pta 数据结构与算法\test.cpp [Error] 'x' was not declared in this scope
E:\pta 数据结构与算法\test.cpp In lambda function:
12 36 E:\pta 数据结构与算法\test.cpp [Error] 'x' is not captured
E:\pta 数据结构与算法\test.cpp In function 'int main()':
12 38 E:\pta 数据结构与算法\test.cpp [Warning] lambda expressions only available with -std=c++11 or -std=gnu++11
12 38 E:\pta 数据结构与算法\test.cpp [Error] invalid user-defined conversion from 'main()::<lambda(int, int)>' to 'int' [-fpermissive]
12 25 E:\pta 数据结构与算法\test.cpp [Note] candidate is: main()::<lambda(int, int)>::operator void (*)(int, int)() const <near match>
12 25 E:\pta 数据结构与算法\test.cpp [Note] no known conversion from 'void (*)(int, int)' to 'int'
12 39 E:\pta 数据结构与算法\test.cpp [Error] expected ',' or ';' before ')' token
15 10 E:\pta 数据结构与算法\test.cpp [Error] 'g' does not name a type
15 35 E:\pta 数据结构与算法\test.cpp [Error] expected primary-expression before ')' token
16 51 E:\pta 数据结构与算法\test.cpp [Warning] lambda expressions only available with -std=c++11 or -std=gnu++11
16 52 E:\pta 数据结构与算法\test.cpp [Error] expected ',' or ';' before ')' token
12 11 E:\pta 数据结构与算法\test.cpp [Error] 'x' was not declared in this scope
E:\pta 数据结构与算法\test.cpp In lambda function:
12 36 E:\pta 数据结构与算法\test.cpp [Error] 'x' is not captured
E:\pta 数据结构与算法\test.cpp In function 'int main()':
12 38 E:\pta 数据结构与算法\test.cpp [Warning] lambda expressions only available with -std=c++11 or -std=gnu++11
12 38 E:\pta 数据结构与算法\test.cpp [Error] invalid user-defined conversion from 'main()::<lambda(int, int)>' to 'int' [-fpermissive]
12 25 E:\pta 数据结构与算法\test.cpp [Note] candidate is: main()::<lambda(int, int)>::operator void (*)(int, int)() const <near match>
12 25 E:\pta 数据结构与算法\test.cpp [Note] no known conversion from 'void (*)(int, int)' to 'int'
12 39 E:\pta 数据结构与算法\test.cpp [Error] expected ',' or ';' before ')' token
15 10 E:\pta 数据结构与算法\test.cpp [Error] 'g' does not name a type
15 35 E:\pta 数据结构与算法\test.cpp [Error] expected primary-expression before ')' token
16 51 E:\pta 数据结构与算法\test.cpp [Warning] lambda expressions only available with -std=c++11 or -std=gnu++11
16 52 E:\pta 数据结构与算法\test.cpp [Error] expected ',' or ';' before ')' token
[此贴子已经被作者于2016-9-8 15:15编辑过]