C++的 lambda 表达式

2014-11-26 17:03:40 +08:00
 stupidcat
初学这个,不太懂,请指教

代码1:
int a = 1;
int n = [&](int x, int y) { return x + y; }(3, 9);
编译通过,n==12
这个lambda表达式缺少返回类型,但是因为“如果编译器能从代码中推断出返回类型,或者Lambda表达式的返回类型为void,则返回类型可省略”,所以编译器应该是自动推断出了返回类型为int

代码2:
int a = 1;
int n = [&](int x, int y) { a = a + 4; return x + y; }(3, 9);
编译失败:
error C2440: “初始化”: 无法从“void”转换为“int”
error C3499: 已指定返回类型为 void 的 lambda 无法返回值

我的疑问是:为什么代码2就无法自动推断出返回类型了呢?(仅仅是多出了一句“a = a + 4;”?)
2496 次点击
所在节点    问与答
4 条回复
stupidcat
2014-11-26 17:06:15 +08:00
为什么刚发的帖子就显示“4小时1分钟前”了……?
XY
2014-11-26 17:29:19 +08:00
代码2用g++ (version = 4.8.2)加上-std=c++11或者-std=c++0x是可以编译通过的.LZ用的是啥编译器?
bcxx
2014-11-26 17:48:09 +08:00
bcxx
2014-11-26 17:50:56 +08:00
应该就是 lambda body 不是 single return 所以 compiler 不能推导出 lambda 的类型(而用默认的 void 吧)

这个应该在不同编译器上有不同的行为……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/149467

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX