数组的 Lambda 捕获(按值)只是复制指针?

Lambda capture (by value) of array is only copying the pointer?

我正在尝试(按值)捕获整个 C 样式数组。该数组似乎衰减为一个指针...如何防止这种情况以便捕获整个数组?

代码:

#include <iostream>

int main()
{
    char x[1024];

    std::cerr << sizeof(x) << "\n";
    [x = x] // copy
    {
        std::cerr << sizeof(x) << "\n";
    }();
}

这会打印:

1024  <<-- yay
8     <<-- oops... not a true copy

应该注意的是,这正如我所希望的那样有效(两个结果都是 1024):


#include <iostream>
#include <array>

int main()
{
    std::array<char, 1024> x;

    std::cerr << sizeof(x) << "\n";
    [x = x] // copy
    {
        std::cerr << sizeof(x) << "\n";
    }();
}

[x = x]

这个等于

auto x1 = x;

其实就是衰减到一个指针。

只需将您的 lambda 捕获更改为 [x] 即可按值捕获 x。您也可以通过 [&x].

引用来捕获它