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

use*_*764 5 c++ lambda pointers capture

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

代码:

#include <iostream>

int main()
{
    char x[1024];

    std::cerr << sizeof(x) << "\n";
    [x = x] // copy
    {
        std::cerr << sizeof(x) << "\n";
    }();
}
Run Code Online (Sandbox Code Playgroud)

这打印:

1024  <<-- yay
8     <<-- oops... not a true copy
Run Code Online (Sandbox Code Playgroud)

应该注意的是,这如我所愿(两个结果均为 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";
    }();
}
Run Code Online (Sandbox Code Playgroud)

jdf*_*dfa 7

[x = x]

这个等于

auto x1 = x;
Run Code Online (Sandbox Code Playgroud)

这实际上是衰减到一个指针。

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