数组的 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]
.
引用来捕获它
我正在尝试(按值)捕获整个 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]
.