一个原始数组与std::array相比有什么优势?

3
根据关于原始数组与std :: vector的问题的已接受的答案,原始数组(在2010年)的优势如下:
  • 数组略微更紧凑:大小是隐含的
  • 数组不可调整大小;有时这是可取的
  • 数组不需要解析额外的STL头文件(编译时间)
  • 使用数组可以更容易地与直接使用C代码进行交互(例如,如果C正在分配并且C ++正在使用)
  • 固定大小的数组可以直接嵌入到结构或对象中,这可以提高内存局部性并减少需要堆分配的数量
据我所知,std :: array解决了除第三个点之外的所有问题。
因此,除非我迫切需要改善编译时间,否则在C ++ 11中使用raw数组而不是std :: array是否有任何理由?

1
@Barry int a[] = {1, 2, 3}; - T.C.
2
@SSpoke,为什么您认为 int a[10];std::array<int,10> a 更大? - Yakk - Adam Nevraumont
4
有一种叫做零成本抽象的东西,C++ 中充满了它们。这个答案证实 std::array 与原始数组的大小相同。链接 - Ixrec
3
很显然,但是错误。std::array与数组相比没有额外的大小开销。使用合理的编译器,它也没有任何运行时成本。这是C++,不是Java,事物可以存在于代码中而完全没有运行时存在。 - Yakk - Adam Nevraumont
1
@SSpoke,(A)关于您的编译器和(B)符号/诊断的存在,这些字符串可能是由于.at()的异常处理而创建的,与对象本身的大小没有任何关系,如果您正确分析过,就会知道这一点。天哪! - underscore_d
显示剩余9条评论
1个回答

3
是的,这个不需要你明确指定大小,这使得它更容易手动初始化:
char const *messages[] =
{
    "Hi",
    "Bye",
    "foo",
    "bar"
};

请注意,C++17将CTAD添加到核心语言中,并将std::array deduction guides添加到标准库中,这允许不明确指定上述代码片段的大小和类型。 - Matthias

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接