DaB*_*ain 22 c++ arrays stl c++11
使用遗留代码,我问自己应该用新的std :: array替换固定大小的C风格数组吗?E. g.
static const int TABLE_SIZE = 64;
double table[TABLE_SIZE];
Run Code Online (Sandbox Code Playgroud)
用...来代替
std::array<double, TABLE_SIZE> table;
Run Code Online (Sandbox Code Playgroud)
虽然我看到使用std :: vector作为可变大小数组的好处,但我没有看到它们具有固定大小.table.size()无论如何都是已知的,std::begin(), std::end()因为自由函数也可以用于具有C风格数组的STL算法.因此,除了更符合标准外,我还能错过更多的好处吗?替换所有事件是否值得工作还是被认为是最佳实践?
Mar*_* A. 11
AFAIK std::array只提供了一个更好的类似STL的接口来处理而不是正常的C阵列.在性能和功能方面,两种选择可以归结为几乎相同,但std::array可以用作标准容器.
另一个特性:它们可能被视为元组,因为它们提供类似元组的访问功能.
最后但并非最不重要的是user2079303注意到:如果您的代码将由新手程序员使用,它可以在将其作为参数传递时阻止数组衰减过程.
如果您想知道是否应该用std :: arrays替换所有C风格的数组,如果您要利用一些新的可用功能和/或重写一些代码以利用它们,答案是肯定的.这些能力.如果你只是简单地用带有std :: arrays的C数组替换它(没有接触任何其他东西),那么它可能是不值得的.
还有一件事我还没有提到:std::array::at().堆栈损坏可能非常讨厌调试,并且由于堆栈损坏导致的错误可能会隐藏很长一段时间.:(该situtation已成为有些更好地与地址消毒剂.不过,我更喜欢边界检查过地址消毒剂.
在我看来,绑定检查元素访问本身就足以使用std::array而不是C样式数组.
另一个功能std::array是可以复制分配;
std::array<int, 3> a = {1, 2, 3};
std::array<int, 3> b = {4, 5, 6};
std::array<int, 3> c = a; // copy-construction
a = b; // copy-assignment
Run Code Online (Sandbox Code Playgroud)