有没有一种安全并符合标准的方法,可以将C风格数组视为std :: array,而不必将数据复制到新的std :: array中?
这显然无法编译,但是这是我想要的效果(我的实际用途更为复杂,但是这个简短的示例应该展示了我想做的事情)。我猜reinterpret_cast可能“有效”,但可能不安全?
这显然无法编译,但是这是我想要的效果(我的实际用途更为复杂,但是这个简短的示例应该展示了我想做的事情)。我猜reinterpret_cast可能“有效”,但可能不安全?
#include <array>
int main()
{
int data[] = {1, 2, 3, 4, 5};
// This next line is the important one, treating an existing array as a std::array
std::array<int, 5>& a = data;
}
感觉应该是可以的,因为数据应该是相同存储的。
编辑:清楚地说,我不想清除一个新的std :: array,我想将现有数据引用为一个。
std::array
和std::vector
期望管理它们自己的内存,您在使用reinterpret_cast
时应非常小心,而不采取措施确保它们不会尝试删除不受其控制的数据。但是除此之外...不要害怕memcpy
。毕竟,它是一个相当高效的例程。 - Rookstd::array
是一种聚合类型,官方上并不算是容器。它没有动态分配的内存,因此内存管理非常简单。 - juanchopanza