为什么C ++ 11 std :: array是一个结构而不是一个类?

时间:2013-10-03 16:14:49

标签: c++11 stdarray

出于好奇,我看了一下std :: array的LLVM实现,并注意到它是一个struct。我看过的大多数其他STL容器(vector,queue,map)都是类。并且它作为结构出现在标准中,因此是故意的。

任何人都知道为什么会这样?

2 个答案:

答案 0 :(得分:10)

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

std::array必须是aggregate。总而言之,这最终意味着它不能拥有任何私有 - 所以它也可以写成struct(默认为公开所有内容)而不是{{1} },(默认为将所有内容设为私有)。

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

class

但是你需要公开所有内容,所以你不妨使用template <...> class array { public: // ... 默认情况下这样做。

答案 1 :(得分:1)

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

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

这与initializer_list的初始化不同之处在于,数组实际上没有为数组元素分配新空间,而是从初始化列表中移动数据,但是括号中的数据(结束)在初始化数据段中) 数组的内部表示。

这意味着没有复制或移动,实际上没有代码运行来初始化任何东西。一旦可执行文件加载到内存中,阵列就可以运行了。