gpt4 book ai didi

c++ - 超出范围指针的比较是否定义明确?

转载 作者:IT老高 更新时间:2023-10-28 21:44:44 26 4
gpt4 key购买 nike

给定以下代码:

char buffer[1024];
char * const begin = buffer;
char * const end = buffer + 1024;
char *p = begin + 2000;
if (p < begin || p > end)
std::cout << "pointer is out of range\n";

执行的比较(p < beginp > end)是否明确?或者这段代码是否有未定义的行为,因为指针已经超过了数组的末尾?

如果比较定义明确,那么定义是什么?

(额外的功劳:begin + 2000 的评估本身是未定义的行为吗?)

最佳答案

我假设 C++11标准。根据第 5.7 节(加法操作数)第 5 段,在进行比较之前,*p = begin + 2000 的行为首先是未定义的:

If both the pointer operand and the result point to elements of the same array object, or one past the last element of the array object, the evaluation shall not produce an overflow; otherwise, the behavior is undefined.

关于c++ - 超出范围指针的比较是否定义明确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13997130/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com