相关疑难解决方法(0)

等于运算符重载:是(x!= y)==(!(x == y))?

我希望这不是重复 - 我搜索了关于相等运算符的其他问题,但除了相关问题中的一些评论之外,我没有找到明确的陈述


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的存在,但人们对其经营者的关系,没有专门的语句==!=运营商.

C++工作组存在相关文档,说......

至关重要的是,相等/不相等[...]表现为彼此的布尔否定.毕竟,如果operator ==()和operator!=()都返回false,那么世界就没有意义了!因此,通常相互实现这些运算符

但是,这仅反映了Common Sense™,并没有指定它们必须像这样实现.


一些背景:我只是试图编写一个函数来检查两个值(未知类型)是否相等,如果不是这样,则打印错误消息.我想说这里所需的概念是类型EqualityComparable.但是对于这个,人们仍然必须写if (!(x==y)) {...},不能if (x!=y) {...},因为这将使用一个不同的运算符,根本没有概念,EqualityComparable甚至可能不同的重载...


更新

我知道程序员基本上可以 …

c++ language-lawyer equals-operator

26
推荐指数
2
解决办法
1525
查看次数

标签 统计

c++ ×1

equals-operator ×1

language-lawyer ×1