根据关于原始数组与std :: vector的问题的已接受的答案,原始数组(在2010年)的优势如下:
因此,除非我迫切需要改善编译时间,否则在C ++ 11中使用raw数组而不是std :: array是否有任何理由?
据我所知,std :: array解决了除第三个点之外的所有问题。
- 数组略微更紧凑:大小是隐含的
- 数组不可调整大小;有时这是可取的
- 数组不需要解析额外的STL头文件(编译时间)
- 使用数组可以更容易地与直接使用C代码进行交互(例如,如果C正在分配并且C ++正在使用)
- 固定大小的数组可以直接嵌入到结构或对象中,这可以提高内存局部性并减少需要堆分配的数量
因此,除非我迫切需要改善编译时间,否则在C ++ 11中使用raw数组而不是std :: array是否有任何理由?
int a[] = {1, 2, 3};
- T.C.int a[10];
比std::array<int,10> a
更大? - Yakk - Adam Nevraumontstd::array
与数组相比没有额外的大小开销。使用合理的编译器,它也没有任何运行时成本。这是C++,不是Java,事物可以存在于代码中而完全没有运行时存在。 - Yakk - Adam Nevraumont.at()
的异常处理而创建的,与对象本身的大小没有任何关系,如果您正确分析过,就会知道这一点。天哪! - underscore_d