平等的定义

Dav*_*xon 5 c++ equality operator-overloading equivalence-classes c++-concepts

当在c ++中重载"=="运算符时,是否存在关于明确意味着什么的标准定义,或者"=="应如何表现的一组准则?

我目前有一个类不会将其整个自我存储在内存中.它基本上使用优先级队列来确定自身内部对象的使用频率,以及何时从队列末尾弹出对象,将它们从内存中删除并写入磁盘.

所以现在问题出现在相等的问题上,这两个对象的相同之处是什么意思.因为我们可以从对象A和B开始,它们在各方面都是相同的,所以它们将相同的数据加载到内存中,并且它们在磁盘上具有相同的数据.但是在调用A和B上的一系列函数后,它们现在可能会有所不同.A和B在磁盘上仍然具有相同的数据,但它们将不同的数据加载到内存中.那么问题应该A == B是真的还是假的?

是否有一套规则或指导方针来定义这应该如何运作?或者这只是我决定什么对程序最有意义并记录"=="的作用的情况?

Fre*_*Foo 16

任何operator==重载都应该尊重等价关系的公理,即

  • x == x,对于所有对象 x
  • 如果x == y,那么y == x
  • 如果x == yy == z,然后x == z.

许多算法==依赖于它实现等价关系,在§17.6.3.1中形式化为EqualityComparable概念.


Luc*_*ore 11

标准中没有关于过载operator ==如何表现的定义.

但是一个足够好的指导原则 - 如果你必须考虑它,你可能甚至不应该超负荷operator ==.如果它不直观,那么弊大于利.

所以问题是A == B应该解析为真还是假?

IMO,它应该导致编译器错误.:)