我希望这不是重复 - 我搜索了关于相等运算符的其他问题,但除了相关问题中的一些评论之外,我没有找到明确的陈述
TL;博士:
C++标准是否保证(x!=y)
始终具有相同的真值!(x==y)
?
我知道有很多微妙之处这里涉及:经营者==
和!=
可能超载.它们可能会被重载以具有不同的返回类型(只需要隐式转换为bool
).甚至!
-operator也可能在返回类型上重载.这就是为什么我手动提到上面的"真值",但试图进一步阐述它,利用隐式转换bool
,并试图消除可能的含糊之处:
bool ne = (x!=y);
bool e = (x==y);
bool result = (ne == (!e));
Run Code Online (Sandbox Code Playgroud)
为result
保证是true
在这里吗?
C++标准在5.10节中指定了相等运算符,但主要似乎是在语法上定义它们(以及关于指针比较的一些语义).该概念被EqualityComparable的存在,但人们对其经营者的关系,没有专门的语句==
给!=
运营商.
至关重要的是,相等/不相等[...]表现为彼此的布尔否定.毕竟,如果operator ==()和operator!=()都返回false,那么世界就没有意义了!因此,通常相互实现这些运算符
但是,这仅反映了Common Sense™,并没有指定它们必须像这样实现.
一些背景:我只是试图编写一个函数来检查两个值(未知类型)是否相等,如果不是这样,则打印错误消息.我想说这里所需的概念是类型EqualityComparable
.但是对于这个,人们仍然必须写if (!(x==y)) {...}
,不能写if (x!=y) {...}
,因为这将使用一个不同的运算符,根本没有概念,EqualityComparable
甚至可能不同的重载...
我知道程序员基本上可以 …