标准规定:
除非两个指针都指向同一数组对象的元素或超过该数组对象的最后一个元素,否则行为未定义。
为什么可以引用超出最后一个元素的位置?
只计算指针并与其进行比较是可以的。原因是它可以用于使用一对指针传递和迭代数组。
如果标准不允许,仅存在pend
就会导致以下循环表现出未定义的行为。
int arr[100] = {0};
for (int *pbegin = arr, *pend = arr + 100; pbegin != pend; ++pbegin)
{
// do stuff
}
在C++中,特别是在标准库中,将范围作为“从开始到结束的迭代器”传递的习惯用法非常重要。
... *pendAndOne = arr + 101; pbegin!=(pendAndOne-1); ...
是未定义的呢? - wulfgarpro... *pendAndOne = arr + 101;
,那么 ... *pendAndOne = arr + 102;
呢?... - songyuanyaoarr
),因此没有必要对此进行标准化。 - user743382