2

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

这不仅仅是重载问题,甚至对于原始类型来说也是奇怪的极端情况。C 和 C++ 中的 NaN 不等于任何东西,包括 NaN。确实 NaN != NaN 在 C 中,但也许在其他语言中有类似的情况会导致¬(a = b)(a ≠ b)不同?

4

2 回答 2

2

Guy L. Steele有句名言

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

正如 corsiKa 所说,仅仅因为你能做到,并不意味着它是一个好主意。

于 2012-04-15T03:12:09.677 回答
1

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

能够重载运算符并不罕见。但是,很少!(a==b)(a!=b)不同的结果。

于 2012-04-14T19:36:56.557 回答