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

我正在尝试捕获(按值)整个 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]


以上是数组的Lambda捕获(按值)只是复制指针?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>