4

出于好奇,我查看了 std::array 的 LLVM 实现,并注意到它是一个结构。我看过的大多数其他 STL 容器(向量、队列、地图)都是类。它作为结构出现在标准中,因此是有意的。

有谁知道这可能是为什么?

4

2 回答 2

10

从技术上讲,它既不是结构也不是类——它是一个模板。

std::array必须是aggregate. 长话短说,这意味着它不能有任何私有的东西——所以它最好写成 a struct(默认将所有内容公开)而不是 a class, (默认将所有内容设为私有) .

如果你愿意,你可以把它写成class

template <...>
class array {
public:
// ...

但是无论如何您都需要公开所有内容,因此您最好使用struct默认情况下执行此操作的 a 。

于 2013-10-03T16:19:50.527 回答
1

std::array是一个 POD 类型,因此它可以像这样初始化:

std::array<int, 5> arr = { 1, 2, 3, 4, 5 };

这与来自 a 的初始化不同initializer_list,因为数组实际上并没有为数组元素分配新空间并将初始化列表中的数据移动到那里,但是括号中的数据(最终在初始化的数据段中)数组的内部表示。

这意味着没有复制或移动,实际上没有代码运行来初始化任何东西。一旦您的可执行文件被加载到内存中,该数组就准备好了。

于 2013-10-03T16:44:48.623 回答