2015-12-14 137 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]'不同。 –