【发布时间】:2021-09-15 17:51:20
【问题描述】:
我正在尝试(按值)捕获整个 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";
}();
}
【问题讨论】:
-
数组是 C++ 的二等公民。他们拒绝被复制,大概是因为很久以前它会被认为是不寻常的,并且可能是一个错误。我不知道它会衰减为 lambda 捕获中的指针,但这对我来说并不奇怪。如果你想要 C++ 中的
array对象,我建议坚持使用std::array,这很少会让人感到意外。
标签: c++ pointers lambda capture