出于好奇,我看了一下std :: array的LLVM实现,并注意到它是一个struct。我看过的大多数其他STL容器(vector,queue,map)都是类。并且它作为结构出现在标准中,因此是故意的。
任何人都知道为什么会这样?
答案 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
的初始化不同之处在于,数组实际上没有为数组元素分配新空间,而是从初始化列表中移动数据,但是括号中的数据(结束)在初始化数据段中) 是 数组的内部表示。
这意味着没有复制或移动,实际上没有代码运行来初始化任何东西。一旦可执行文件加载到内存中,阵列就可以运行了。