c++ - 为什么可以比较最后一个元素?

标签 c++ c pointers memory

<分区>

标准规定:

Unless both pointers point to elements of the same array object or one past the last element of the array object, the behavior is undefined.

为什么在最后一个元素之后引用一个是有效的?

最佳答案

可以计算该指针并仅与它进行比较。原因是它可用于使用一对指针传递和迭代数组。

如果标准不允许,仅存在 pend

,以下循环就会表现出未定义的行为
int arr[100] = {0};

for (int *pbegin = arr, *pend = arr + 100; pbegin != pend; ++pbegin)
{
  // do stuff
}

这在 C++ 中尤为重要,标准库大量使用将范围作为“迭代器到开头和结尾的迭代器”传递的习惯用法。

关于c++ - 为什么可以比较最后一个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41789092/

相关文章:

c++ - 构建 OpenCV 时出错::MonitorFromRect 未在此范围内声明

C++ 模板和 Unsigned long 问题

c - 在 C 中,使用指向结构的指针来调用指向结构内部的函数会导致段错误

c - 我可以在文件系统驱动程序中的 ZwCreateFile/InitializeObjectAttributes 中设置/检查用户定义的标志吗?

c - 指向指针 malloc 和操作的指针

c++ - 将 std::vector 传递给修改输入数组的函数

c++ - 将函数名称作为 C++ 类中另一个函数的参数传递

c++ - Windows 7中.exe文件的文件路径

arrays - 声明数组时指定的大小超过所需的大小是一种不好的做法吗?

c - 使用指针的字符串连接