比较两个对象会发生什么?

时间:2009-07-28 23:47:05

标签: c++ oop object-comparison

如果我为类Foo编写了一个运算符==(在C ++中),究竟会发生什么?它是否将每个数据成员相互比较?

class Foo
{
   private:
      int bar;

   public:
      bool operator==(const Foo other&)
      {
         return *this == other; //what?
         //is this the same as bar == bar?
      }
}

1 个答案:

答案 0 :(得分:16)

上面的代码将递归调用自己,直到你得到堆栈溢出(窃笑)并且程序崩溃。方法本身(你写的那个)是相等运算符,然后在正文中再次显式调用。

重写等于运算符(operator==)背后的想法是,您可以自己决定应该如何实现相等性。所以你可能想让你方法的主体做类似的事情:

return this->bar == other.bar;

哪个会做你最想要的。

你可能不希望C ++对于平等“智能”并自动进行成员比较的原因之一是你可能对“平等”的含义与C ++标准体有不同的看法。

例如,只有当指针指向完全​​相同的对象时,您可能会认为具有指针成员的类是相等的,或者如果指向对象在成员上相等,您可能只认为它们相等。或者它们可能是(注意:这里的坏习惯,但人们仍然这样做)指向一些随机地址,因为它们尚未初始化并且取消引用它们将导致崩溃(“你”可能因为一些标志变量而知道这一点,但是当C ++试图“帮助”取消引用它时,C ++就不会这样做了。