标准规定:
除非两个指针指向同一个数组对象的元素或者指向数组对象的最后一个元素之后,否则行为是未定义的.
为什么在最后一个元素之后引用一个是有效的?
可以计算该指针并仅与其进行比较.原因是它可以用于使用一对指针传递和迭代和数组.
如果标准不允许,那么仅仅存在以下循环就会表现出不确定的行为 pend
int arr[100] = {0}; for (int *pbegin = arr, *pend = arr + 100; pbegin != pend; ++pbegin) { // do stuff }
这在C++中尤为重要,其中标准库大量使用将范围作为"开头的迭代器和一个结尾"的惯用法.