【发布时间】:2012-06-26 10:17:40
【问题描述】:
是否有任何安全且符合标准的方法可以将 C 样式数组视为 std::array 而无需将数据复制到新的 std::array 中?
这显然不能编译,但这是我想要的效果(我的实际使用更复杂,但这个简短的示例应该显示我想要做什么)。我猜 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,我想将现有数据称为一个。
【问题讨论】:
-
STL 容器管理自己的内存。您不能创建一个数组并让它管理您在其他地方分配的某个数组。
-
鉴于
std::array和std::vector期望管理自己的内存,您应该非常小心使用reinterpret_cast而不采取措施确保他们不会尝试删除不存在的数据t 在他们的控制之下。但除此之外......不要害怕memcpy。毕竟,这是一个相当有效的例程。 -
好的,谢谢。我想安全地做到这一点,而不是做黑客,我只是想知道这是否有可能:)
-
@krammer
std::array是一个聚合,而不是正式的容器。它没有动态分配的内存,所以内存管理很简单。 -
我同意@Juanchopanza,我什至可以说它可以是相同的。对于 krammer 和 Rook:std::array 与 std::vector 非常不同,std::array 不会重新分配内存,它的大小是硬编码的
标签: c++