2

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

class Foo
{
   private:
      int bar;

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

1 回答 1

16

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

覆盖相等运算符 ( ) 背后的想法operator==是,您可以自己决定应该如何实现相等。因此,您可能希望使方法的主体执行以下操作:

return this->bar == other.bar;

这会做你最可能想要的。

您可能不希望 C++ 在平等方面“聪明”并自动进行成员比较的原因之一是您可能对“平等”的含义与 C++ 标准主体有非常不同的想法。

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

于 2009-07-28T23:49:23.067 回答