#include <vector>
#include <algorithm>
void foo(int)
{
}
int main()
{
std::vector<int> v({ 1,2,3 });
std::for_each(v.begin(), v.end(), [](auto it) { foo(it+5); });
}
在編譯時使用汽車,上面的例子開始這樣的錯誤輸出:在lambda函數
h4.cpp: In function 'int main()':
h4.cpp:13:47: error: parameter declared 'auto'
h4.cpp: In lambda function:
h4.cpp:13:59: error: 'it' was not declared in this scope
這是否意味着關鍵字auto
不應在lambda表達式中使用?
這工作:
std::for_each(v.begin(), v.end(), [](int it) { foo(it+5); });
爲什麼用auto關鍵字的版本不工作?
我認爲,即使是一個lambda,它仍然工作的功能,必須有一個簽名。使用auto時,讓編譯器決定類型,這樣你的lambda在編譯時纔會有真正的簽名。 – Geoffroy
我們確實需要下一個標準中的多態lambda表達式(AKA隱式模板)。這個問題只是人們假設'auto'以這種方式工作的幾個例子之一。我認爲沒有理由不應該。 –
deft_code,我與你同在。對於汽車來說這是一個合乎邏輯的用例。 – Robert