正如标题所说:我是否需要重写==运算符? 那么.Equals()方法呢? 任何我失踪?
我正在testing元组结构,当我使用==运算符时,发现它很奇怪: >>> (1,) == 1, Out: (False,) 当我将这两个expression式分配给一个variables时,结果是正确的: >>> a = (1,) >>> b = 1, >>> a==b Out: True 这个问题不同于我的观点中的Python元组尾随逗号语法规则 。 我要求==运算符之间的expression式组。
我正在学习C ++中的运算符重载,我发现==和!=只是一些特殊的函数,可以为用户定义的types定制。 但是,我担心为什么需要两个单独的定义? 我认为如果a == b是真的,那么a != b自动为false,反之亦然,并且没有其他可能性,因为根据定义, a != b是!(a == b) 。 而且我无法想象任何情况都不是这样的。 但也许我的想象力是有限的,或者我对某些事情一无所知? 我知道我可以用另一个来定义一个,但这不是我所问的。 我也没有问及通过价值或身份来比较对象的区别。 或者两个对象是否可以同时相等和不相等(这绝对不是一种select!这些东西是相互排斥的)。 我问的是这样的: 有没有什么情况可以提出关于两个对象相同的问题是有道理的,但是询问他们是不是平等的没有意义? (无论是从用户的angular度,还是从实施者的angular度来看) 如果没有这种可能性,那么为什么C ++将这两个运算符定义为两个不同的函数呢?