gpt4 book ai didi

c++ - 指针上的运算符<(小于)是否一致?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:37:56 24 4
gpt4 key购买 nike

注意:这个问题不是关于总顺序的。可以使用 std::less 获得相同类型指针的总顺序。 .

According to this , 将两个指针与 operator< 进行比较例如,如果它们指向不同的分配,则不允许。

在什么意义上不允许?它是实现定义的、未指定的还是未定义的行为?

我想我在某处读到它未指定。不需要实现来记录行为是什么,但必须有一些行为。所以这意味着,比较任意两个指针仍然是合法的,但不一定会产生总顺序。 这是否意味着,当比较相同的两个指针两次时,我们仍然必须获得一致的结果?一般情况是:在应用程序中两次调用相同的未指定行为是否总是产生相同的结果?

int i1, i2;
int* a = &i1;
int* b = &i2;
bool b1 = a < b; // unspecified, right?
bool b2 = a < b;
assert(b1 == b2); // Is this guaranteed to be true?

最佳答案

比较两个不相关的指针(即不指向同一内存的指针,或不指向同一“数组”的不同部分的指针)只能使用相等来完成 ==和不平等!= .所有其他比较未指定

如果您有两个指向同一位置或同一数组内的指针,那么您可以使用相对运算符比较它们。

所以如果你有例如

int* p1 = new int[10];
int* p2 = new int[5];

只能使用==!=比较指针 p1p2 .

如果你有

int a = new int[10];
int* p1 = &a[0];
int* p2 = &a[3];

那么你也可以使用<> (当然还有 <=>= )来比较 p1p2

关于c++ - 指针上的运算符<(小于)是否一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44397784/

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