6
函數體包含除單個之外的任何內容的lambda 未指定返回類型的return語句return void。C++中的lambda返回類型
通過「C++入門」第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++入門「第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。
這是爲什麼?
我很困惑。
我認爲*只要他們都返回相同的值*應該*只要他們都返回相同的類型* – vsoftco
@vsoftco絕對正確,固定。 – hobbs
委員會決定發佈的C++ 11標準(和C++ Primer)中描述的行爲是一個缺陷。即使在C++ 11模式下,更新版本的編譯器也應該接受這一點。 –