数组的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]。