【发布时间】:2016-10-22 19:24:46
【问题描述】:
具有包含除单个以外的任何内容的函数体的 Lambda 未指定返回类型的 return 语句返回 void。
通过《C++ Primer》第 5 版,第 389 页。
但是,如果我们使用 if 编写看似等效的程序 声明,我们的代码不会编译:
//error: can't deduce the return type for the lambda. transform(vi.begin(), vi.end(), vi.begin(), [](int i) { if(i < 0) return -i; else return i; } );通过《C++ Primer》第 5 版,第 396 页。
我在 Visual Studio 中编写了一个程序:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main(void) {
vector<int> vi{ 1, -2, 3, -4, 5, -6 };
/* Is the return type void? */
transform(vi.begin(), vi.end(), vi.begin(), [](int i) {
if (i < 0) return -i;
else return i; });
for (int i : vi)
cout << i << " ";
cout << endl;
system("pause");
return 0;
}
但它可以正常运行。
然后,我在 Visual Studio 中添加了一些语句:
auto f = [](int i) {
if (i < 0) return -i;
else return i; };
当我将光标移动到 f 时,它显示 f 的返回类型是 int。
这是为什么?
我很困惑。
【问题讨论】: