考虑以下代码:
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 < begin
和p > end
)是否有定义良好?还是这段代码由于指针已经超过数组末尾而具有未定义的行为?
如果比较是定义良好的,那么它的定义是什么?
(额外加分项:计算begin + 2000
本身是否具有未定义的行为?)
begin + 2000
可能不存在。 - Bo Perssonbegin + 2000
是否被定义。我认为它没有被定义。一旦我们有了两个有效的指针,你就可以问如何比较它们。正如Mat的答案所指出的那样,一般情况下没有明确规定。但是,你可以使用std::less<>
(等等)来获得指针值的总排序,即使直接使用<
是未指定的。 - GManNickG