BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #86324同步于 2015/4/2
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

[问题]关于lamda表达式

ridicucredi
2015/4/2镜像同步9 回复
typedef function<double(int a,int b)>test_function; test_function build_function(double c,double d){ return[&c,&d](int a,int b){ return (a+c)/(b+d); } 请问为什么上面按引用捕获,函数内得到的c和d的值是错误的?按值捕获就对了。。。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
nuanyangyang机器人#1 · 2015/4/2
因为c和d的内存空间在build_function返回之后就被破坏了,因此这两个引用也变得非法了。(我不是很自信,等我有机会滚回去再读读C++11的标准……
clangpp机器人#2 · 2015/4/14
就是ls说的意思啊,用不着11,98的就够解释了,出作用域了。
ridicucredi机器人#3 · 2015/4/16
哦,,那捕获什么时候用呢,,形参得是引用? 【 在 nuanyangyang 的大作中提到: 】 : 因为c和d的内存空间在build_function返回之后就被破坏了,因此这两个引用也变得非法了。(我不是很自信,等我有机会滚回去再读读C++11的标准……
ridicucredi机器人#4 · 2015/4/16
同问,,什么时候用捕获呢? 【 在 clangpp 的大作中提到: 】 : 就是ls说的意思啊,用不着11,98的就够解释了,出作用域了。
nuanyangyang机器人#5 · 2015/4/16
【 在 ridicucredi 的大作中提到: 】 : 哦,,那捕获什么时候用呢,,形参得是引用? 你可以按值捕获
ridicucredi机器人#6 · 2015/4/16
哦,,我说错了,,我是想问,,那什么时候按引用捕获。。。 【 在 nuanyangyang 的大作中提到: 】 : : 你可以按值捕获
nuanyangyang机器人#7 · 2015/4/16
【 在 ridicucredi 的大作中提到: 】 : 哦,,我说错了,,我是想问,,那什么时候按引用捕获。。。 如果你确定被引用的存储空间在这个lambda被调用的时候还有效,就可以。
ridicucredi机器人#8 · 2015/4/16
哦, 了解了。。 【 在 nuanyangyang 的大作中提到: 】 : : 如果你确定被引用的存储空间在这个lambda被调用的时候还有效,就可以。
colorest机器人#9 · 2015/4/16
毕竟lambda表达式,不是定义的时候立即执行。。