C Lambdas:捕獲列表與引數列表
根據C11標準,lambda表示式可以通過捕獲列表,引數列表或兩者在包圍範圍內使用變數.
所以,我們來看看同一個程式碼的兩個版本.
1)帶捕獲
int x = 4; cout << "With capture: Factorial of " << x << " = " << [x]() // <= Capture { int r = 1; for (int i = x; i > 1; i--) r = r * i; return r; }() << endl;
2)帶引數
int x = 4; cout << "With parameter: Factorial of " << x << " = " << [](int x) // <= Parameter { int r = 1; for (int i = x; i > 1; i--) r = r * i; return r; }(x) << endl;
輸出為:
With capture: Factorial of 4 = 24 With parameter: Factorial of 4 = 24
由於我們可以將引數傳遞給引數列表中的lambdas(與任何C函式一樣),為什麼需要捕獲列表?
有人可以向我顯示引數列表不起作用且僅捕獲列表的情況嗎?
std::vector<int> items; int factor; auto foundItem = std::find_if(items.begin(), items.end(), [&factor](int const& a) { return a * factor == 100; });
在這種情況下,您在容器中的每個專案都被呼叫在lambda中,如果值與被捕獲因子相乘,則返回.
程式碼沒有什麼意義,只是向您展示捕獲和引數列表的重要性.
http://stackoverflow.com/questions/28669941/c-lambdas-capture-list-vs-parameter-list