| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4723 人关注过本帖
标题:Lambda表达式
取消只看楼主 加入收藏
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
结帖率:93.75%
收藏
已结贴  问题点数:20 回复次数:4 
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






[此贴子已经被作者于2016-9-8 15:15编辑过]

搜索更多相关主题的帖子: 百度百科 检测 博客 表达式 
2016-09-08 14:55
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
回复 2楼 rjsp
谢谢您的帮助!

我想写代码测试自己的想法,验证Lambda的用法。。。遇到麻烦了...

图片附件: 游客没有浏览图片的权限,请 登录注册

上网搜了一下,auto是C11的标准。我用的是DEVC++5.11.我用的标准是什么能不能查看?怎么改?

参数里加上 -std=c++11再试试
我应该加在哪里?感觉他们是用命令行编译的时候这样加的参数。我应该怎么办,



φ(゜▽゜*)♪
2016-09-09 11:07
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
回复 4楼 rjsp
谢谢,已查询到
图片附件: 游客没有浏览图片的权限,请 登录注册


谢谢您给出的链接,接下来的我去找百度
谢谢


φ(゜▽゜*)♪
2016-09-09 12:28
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
回复 4楼 rjsp
图片附件: 游客没有浏览图片的权限,请 登录注册

14    28    E:\pta 数据结构与算法\test.cpp    [Error] decrement of read-only variable 'Key'
我不是已经是引用传递了吗?为什么说Key是只读函数。




[此贴子已经被作者于2016-9-9 15:03编辑过]


φ(゜▽゜*)♪
2016-09-09 14:51
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
回复 6楼 书生牛犊
已解决
【&】(){...}  表示把当前模块中的所有变量引用传递进表达式内部
[=](){...}    表示把当前模块中的所有变量值传递到表达式内部
【参数表】(){}  和[=]类似,但是只选择了需要的部分变量值传递到表达式内部
[](){...}    表示表达式内部不需要任何额外的参数。

φ(゜▽゜*)♪
2016-09-09 15:07
快速回复:Lambda表达式
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030859 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved