数组初始化需要一个包含大括号的初始值设定项列表lambda

array initialization requires a brace-enclosed initializer list lambda

本文关键字:lambda 列表 初始化 包含大 一个 数组      更新时间:2023-10-16

我是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 << " ";
    }

这是visualstudio上的错误消息。

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

您不能复制数组,所以如果您确实需要arr,您可以通过引用来捕获它:

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

然而,由于您没有引用lambda主体中的数组,因此根本不需要捕获它:

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