C++:运算符重载<用于指向对象的指针

7 c++ pointers operator-overloading

我想通过他们的地址比较两个对象.我试过运算符重载,它似乎不适用于指针,但适用于对象本身.以下是相关代码:

class C {
        public:
                int x;
};
.
.
.
bool operator <( C *ptr_c1, C *ptr_c2 )
{
        return ( (*ptr_c1).x < (*ptr_c2).x );
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ork 10

我试过运算符重载,它似乎不适用于指针,

正确.

但适合对象本身.

正确.

那么问题是什么?

您想在已排序的容器中使用指针吗?

#include <iostream>
#include <set>

struct X
{
    int x;
};
Run Code Online (Sandbox Code Playgroud)


CB *_*ley 5

指针是本机C ++类型,您只能为用户定义的类型(即类)重载运算符。

如果可能的话,这将违反“最不惊奇”的原则,并导致指针比较根据您的定义是否可见而表现不同。这可能会非常令人困惑。

如果要在容器或算法中使用替代比较,请注意,可以为std::less大多数需要部分排序的关联容器和算法中的默认值提供替代。