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/