& array [size]是否完全安全?

时间:2012-11-05 03:00:10

标签: c++ memory pointers standards-compliance

  

可能重复:
  Take the address of a one-past-the-end array element via subscript: legal by the C++ Standard or not?

在C ++标准库中,许多算法将begin()end()迭代器作为参数。但诀窍是end()迭代器在容器结束之后。如果我想将算法应用于标准c-array,我必须传递等效的begin()end()指针。

问题如下:

const unsigned int size = 10;
int array[size];
std::iota(&array[0], &array[size], 0); // <- Version 1
std::iota(&array[0], &array[0]+size, 0); // <- Version 2

这两个版本是否完全相同?根据C ++标准,我可以毫无问题地使用版本1吗?

我怀疑的是&array[size]在数组结束后访问元素然后获取地址,而&array[0]+size在数组结束后不访问该元素。

1 个答案:

答案 0 :(得分:3)

只需使用std::begin中的std::end<iterator>,不要担心 - 他们会做正确的事情。 :)