【发布时间】:2015-03-09 17:25:11
【问题描述】:
根据this question about raw arrays vs std::vector 上接受的答案,原始数组(早在 2010 年)的优点是:
- 数组更紧凑:大小是隐式的
- 数组不可调整大小;有时这是可取的
- 数组不需要解析额外的 STL 标头(编译时)
- 可以更轻松地与带有数组的纯 C 代码进行交互(例如,如果 C 正在分配并且 C++ 正在使用)
- 固定大小的数组可以直接嵌入到结构或对象中,这可以改善内存局部性并减少所需的堆分配数量
据我所知,std::array 解决了除第三点之外的所有问题。
所以除非我迫切需要改进我的编译时间,有没有理由在 C++11 中使用原始数组而不是 std::array?
【问题讨论】:
-
如果你有一个函数需要一个类型为指针/引用数组的参数,那么使用
std::array将需要an ugly cast -
@SSpoke -1,为什么你认为
int a[10];比std::array<int,10> a大? -
有一种零成本抽象。 C++ 充满了它们。 This answer confirms that std::array has the same size as a raw array.
-
@sspoke 明显,但错误。
std::array对数组没有大小开销。使用合理的编译器,它也没有运行时成本。这是 C++ 而不是 Java,东西可以存在于代码中,根本不存在任何运行时。
标签: c++ arrays c++11 stl stdarray