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

elS*_*ape 4 c++11 stdarray

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

谁知道为什么会这样?

Jer*_*fin 10

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

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

如果你想,你可以把它写成class:

template <...>
class array {
public:
// ...
Run Code Online (Sandbox Code Playgroud)

但是你需要把所有东西都公之于众,所以你可以struct默认使用那样做.

  • @elSnape因为std :: array需要尽可能薄.一个设计决定是所有std :: array的代码都应该在编译时消失,以使其与裸数组一样高效(空间和时间). (4认同)