其他分享
首页 > 其他分享> > C重载运算符==和<之间的区别

C重载运算符==和<之间的区别

作者:互联网

谁能解释我重载==和<有什么区别? 例如,如果我使用地图:

map<Type, int> a();

friend bool operator<(const Type& lhs, const Type& rhs);

friend bool operator==(const Type& lhs, const Type& rhs);

当我调用时,我实现了两个运算符:

a.find(value);

==的运算符函数被调用吗?我想不是.我调试并看到了<被称为,但是为什么呢? <的运算符函数的行为应该是什么? 我来自Java,其中方法equals被调用,并且很容易理解行为. 谢谢.

解决方法:

operator ==重载==运算符(并且没有其他值);操作符LT;
<运算符(无其他). std :: map被定义为使用std :: less(仅std :: less)
默认值,并且std :: less被定义为使用<默认.一般来说,
但是,我建议不要重载operator<除非
有序的比较对您的班级有意义,在这种情况下,您应该
以连贯的方式重载所有六个比较运算符.
否则,您可以指定比较功能类型作为附加功能
std :: map的模板参数;比较功能对象应
定义严格的弱排序关系.如果类型设计为
用作键,但是顺序仍然纯粹是任意的,您可能
专精std :: less.

对于Java,没有运算符重载,显然不能使用&lt ;;.
默认情况下,SortedMap(Java等价于std :: map)要求
键是可比较的,但是这又需要比较
函数,其返回值<,==或> 0,取决于是否
这是<,==或>比其他.我承认我发现这是一个
有点合乎逻辑,但是区别非常非常小. (该
C决策背后的理由是像int或
double可用作键.在Java中,您必须将它们装箱.)

标签:c,operator-overloading
来源: https://codeday.me/bug/20191011/1891926.html