在C ++中,可以为用户类型重载==
和!=
运算符,但语言并不关心你是如何做到的。无论如何,您都可以重载两者以返回true
,因此!(a==b)
和(a!=b)
不一定要评估相同的内容。有多少其他语言的情况¬(a = b)
和(a ≠ b)
可能不同?这是常见的事吗?
这不仅仅是一个重载的问题,而是奇怪的角落情况,即使对于原始类型。 C和C ++中的NaN不等于任何东西,包括NaN。确实,NaN!= C中的NaN,但是在其他语言中可能会出现导致¬(a = b)
和(a ≠ b)
不同的情况?
答案 0 :(得分:2)
Guy L. Steele有一句名言
...定义自己的运算符函数的能力意味着一个简单的语句,如x = a + b;内环可能涉及向阿富汗发送电子邮件。
正如corsiKa所说,只是因为你能做到这一点,并不是一个好主意。
答案 1 :(得分:1)
我知道Python和Ruby可以和Java和PHP不能这样做。 (在Java ==
中确定两个对象在内存中是否相同,而不仅仅是语义上等价的值。在PHP中......没关系。)我还想象Lisp和JS可以和C不能,但是这更具投机性。
能够超载运营商并不罕见。 !(a==b)
和(a!=b)
很少有不同的结果。