【发布时间】:2015-07-27 14:27:33
【问题描述】:
如果我想构建一个非常简单的数组,比如
int myArray[3] = {1,2,3};
我应该改用std::array 吗?
std::array<int, 3> a = {{1, 2, 3}};
使用 std::array 比普通的有什么优势?它的性能更高吗?只是更容易处理复制/访问?
【问题讨论】:
-
用 std:: 定义多维数组会很困难
-
@goGud:不难,只是更冗长。
-
指针衰减、引用等...,很多关于 c 数组的事情都很奇怪。在 c 数组的情况下,迭代器可能是一个指针,
for (auto i = ++std::begin(myArray); . . .甚至可能无法编译(似乎基本类型的临时变量不是可变的,至少在 clang 6 中不是) -
初始化也神奇地不同:
struct Direction { int32_t dw; int32_t dh; };和static const Direction DIRECTIONS[DIRECTIONS_COUNT] { { -1, 1}, {0,1}, {1,1} , { 1, 0 }, {1,-1}, {0,-1} , {-1,-1}, {-1,0} };编译。但是,如果您更改为具有相同初始化程序列表的std::array<Direction,DIRECTIONS_COUNT>,您会突然收到“初始化程序太多”错误。 (VS 2019 社区语言 = C++17) -
@Marc.2377
std::array只是 C 样式数组的包装器。如果我没记错的话,在某些早期版本的 C++ 中,您无法使用单括号对其进行初始化。但是,不要相信我的话,因为我没有太多使用它们