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)
指针是本机C ++类型,您只能为用户定义的类型(即类)重载运算符。
如果可能的话,这将违反“最不惊奇”的原则,并导致指针比较根据您的定义是否可见而表现不同。这可能会非常令人困惑。
如果要在容器或算法中使用替代比较,请注意,可以为std::less大多数需要部分排序的关联容器和算法中的默认值提供替代。