2015-12-14 134 views
0

我是lambda表達式的新手,並且很困惑爲什麼我在這裏得到錯誤?數組初始化需要一個大括號初始化列表lambda

#include <iostream> 
#include <algorithm>  
using namespace std;  
int main() 
{ 
    int arr[] = { 11, 21, 4, 13 }; 

    for_each(arr, arr + 4, [arr](int x) { 
     cout << x; 
    }); 
    return 0; 
} 

我只是爲這個函數添加LAMBDA。

void fun1(int x) 
    { 
     cout << x << " "; 
    } 

這是Visual Studio的錯誤消息。

'main::<lambda_4ee0815d3a456ed46cc70a2a94c10f76>::arr': 
array initialization requires a brace-enclosed initializer list Project1 
+2

Ey,使用C數組引起的又一個問題!說真的,只要使用'std :: array',如果你有C++ 11的話。 –

+1

是否需要'arr'?不['](int x){...'是否工作? – 4386427

回答

6

您不能複製數組,這樣你就可以通過參考捕捉arr,而是如果你真的需要它:

for_each(arr, arr + 4, [&arr](int x) { cout << x; }); 
//      ^^^ 

但是,因爲你沒有提到數組中的拉姆達身上,你根本不需要捕獲它:

for_each(arr, arr + 4, [](int x) { cout << x; }); 
//     ^^^^ 
+0

Kerrek SB,爲什麼?你能解釋一下嗎?如果我想捕獲數組呢? – UnKnown

+1

@UnKnown:好點,你根本不需要數組。 *你*告訴我*你爲什麼要捕捉它! –

+0

@PiotrSkotnicki:不,爲什麼?你在想''[p = arr]'?這與'[arr]'不同。 –