Language agnostic 语言,其中¬;(a=b)和(a&x2260;b)可以不同 在C++中,可以超载 = = 和!代码>用户类型的运算符,但该语言不关心如何操作。无论发生什么情况,都可以重载这两个函数以返回true,因此!(a==b)和(a!=b)的计算结果不一定相同。有多少种其他语言的情况是,(a=b)和(a)≠ b) 可以不同吗?这是一件平常的事吗

Language agnostic 语言,其中¬;(a=b)和(a&x2260;b)可以不同 在C++中,可以超载 = = 和!代码>用户类型的运算符,但该语言不关心如何操作。无论发生什么情况,都可以重载这两个函数以返回true,因此!(a==b)和(a!=b)的计算结果不一定相同。有多少种其他语言的情况是,(a=b)和(a)≠ b) 可以不同吗?这是一件平常的事吗,language-agnostic,Language Agnostic,这不仅仅是一个重载问题,甚至对于基元类型来说也是一个奇怪的情况。C和C++中的楠没有任何东西可以比,包括楠。南是真的在C语言中为NaN,但在其他语言中可能也有类似的情况导致,(a=b)和(a≠ b) 与众不同?我知道Python和Ruby可以,Java和PHP不能。(在Java中,=确定两个对象在内存中是否是相同的东西,而不仅仅是语义上等价的值。在PHP中……没关系。)我还可以想象Lisp和JS可以,而C不能,但这有点推测性 让操作员超负荷工作并不是什么稀奇的事情。这对于来说是非常罕见的!(a=

这不仅仅是一个重载问题,甚至对于基元类型来说也是一个奇怪的情况。C和C++中的楠没有任何东西可以比,包括楠。南是真的在C语言中为NaN,但在其他语言中可能也有类似的情况导致
,(a=b)
(a≠ b) 
与众不同?

我知道Python和Ruby可以,Java和PHP不能。(在Java中,
=
确定两个对象在内存中是否是相同的东西,而不仅仅是语义上等价的值。在PHP中……没关系。)我还可以想象Lisp和JS可以,而C不能,但这有点推测性

让操作员超负荷工作并不是什么稀奇的事情。这对于
来说是非常罕见的!(a==b)
(a!=b)
有不同的结果

有句名言

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


正如你可以做的那样,不把它当成一个好主意。< / P>因为你可以在C++中做这件事,这并不意味着你永远都应该……我知道你可以在Ruby中做到这一点!我还想补充一点。。可以重载==或!=的任何语言操作人员还是太多了?我猜,在JavaScript中应该有一些案例。@当然,在C++中,你也可以创建一个<代码> FakBOOL类,重载<代码> = = 和<代码>!
运算符正常工作,但返回一个
伪布尔值,然后重载
运算符
返回*此
Java只允许更改正数:
等于
,并且无法重载否定形式。是的,您可以合理地重写
=
=
生成布尔结果以外的结果(可能是SQL条件或诸如此类),但破坏逻辑会适得其反,因此
!(a==b)
不等于
(a!=b)