这是一个创建于 3618 天前的主题,其中的信息可能已经有所发展或是发生改变。
初学这个,不太懂,请指教
代码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;”?)
4 条回复 • 2014-11-26 17:50:56 +08:00
|
|
1
stupidcat 2014-11-26 17:06:15 +08:00
为什么刚发的帖子就显示“4小时1分钟前”了……?
|
|
|
2
XY 2014-11-26 17:29:19 +08:00 1
代码2用g++ (version = 4.8.2)加上-std=c++11或者-std=c++0x是可以编译通过的.LZ用的是啥编译器?
|
|
|
3
bcxx 2014-11-26 17:48:09 +08:00 1
|
|
|
4
bcxx 2014-11-26 17:50:56 +08:00 1
应该就是 lambda body 不是 single return 所以 compiler 不能推导出 lambda 的类型(而用默认的 void 吧)
这个应该在不同编译器上有不同的行为……
|