¬(a = b)和(a≠b)的语言可以不同

时间:2012-04-14 19:31:48

标签: language-agnostic

在C ++中,可以为用户类型重载==!=运算符,但语言并不关心你是如何做到的。无论如何,您都可以重载两者以返回true,因此!(a==b)(a!=b)不一定要评估相同的内容。有多少其他语言的情况¬(a = b)(a ≠ b)可能不同?这是常见的事吗?

这不仅仅是一个重载的问题,而是奇怪的角落情况,即使对于原始类型。 C和C ++中的NaN不等于任何东西,包括NaN。确实,NaN!= C中的NaN,但是在其他语言中可能会出现导致¬(a = b)(a ≠ b)不同的情况?

2 个答案:

答案 0 :(得分:2)

Guy L. Steele有一句名言

  

...定义自己的运算符函数的能力意味着一个简单的语句,如x = a + b;内环可能涉及向阿富汗发送电子邮件。

正如corsiKa所说,只是因为你能做到这一点,并不是一个好主意。

答案 1 :(得分:1)

我知道Python和Ruby可以和Java和PHP不能这样做。 (在Java ==中确定两个对象在内存中是否相同,而不仅仅是语义上等价的值。在PHP中......没关系。)我还想象Lisp和JS可以和C不能,但是这更具投机性。

能够超载运营商并不罕见。 !(a==b)(a!=b)很少有不同的结果。