gpt4 book ai didi

c++ - 比较相同类型的指针是否安全?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:26:52 26 4
gpt4 key购买 nike

char** buffer{ /* some buffer */ };
char* ptr1{buffer[0]};
char* ptr2{buffer[10]};

assert(ptr1 < ptr2);

如果两个指针指向同一缓冲区中的不同位置,比较它们是否安全?

我想通过比较来了解指针范围是否有效:assert(rangeBeginPtr < rangeEndPtr) .

最佳答案

您可以将指针与关系运算符( <><=>= )进行比较,前提是它们都指向同一数组的一个元素,或者指向该数组之后的元素。根据 C++11 5.9 Relational operators,其他任何行为都是未指定的行为.所以,给定:

char xyzzy[10];
char plugh[10];

所有这些都被指定为正常运行:

assert(&(xyzzy[1]) < &(xyzzy[4]));
assert(&(xyzzy[9]) < &(xyzzy[10])); // even though [10] isn't there.

但这些不是:

assert(&(xyzzy[1]) < &(xyzzy[15]));
assert(&(xyzzy[9]) < &(plugh[3]));

除了如果您比较同一数组中的两个元素,它必须是同一类型之外,类型不会出现在其中。如果你有两个 char *变量,如果它们指向不同数组,则未指定,即使它们具有相同类型。

关于c++ - 比较相同类型的指针是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18444566/

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