代码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;”?)