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,没有运算符重载,显然不能使用< ;;.
默认情况下,SortedMap(Java等价于std :: map)要求
键是可比较的,但是这又需要比较
函数,其返回值<,==或> 0,取决于是否
这是<,==或>比其他.我承认我发现这是一个
有点合乎逻辑,但是区别非常非常小. (该
C决策背后的理由是像int或
double可用作键.在Java中,您必须将它们装箱.)
标签:c,operator-overloading 来源: https://codeday.me/bug/20191011/1891926.html