jke*_*eys 2 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?
}
}
Run Code Online (Sandbox Code Playgroud)
Ada*_*kin 16
上面的代码将递归调用自己,直到你得到堆栈溢出(窃笑)并且程序崩溃.方法本身(您编写的那个)是相等运算符,然后在正文中再次显式调用.
覆盖等于operator(operator==
)的想法是你可以自己决定应该如何实现相等.所以你可能想让你的方法的主体做类似的事情:
return this->bar == other.bar;
Run Code Online (Sandbox Code Playgroud)
哪个会做你最想要的.
你可能不希望C++对于平等"聪明"并自动进行成员比较的原因之一是你可能对"平等"比C++标准体有什么不同.
例如,只有当指针指向完全相同的对象时,您可能会认为具有指针成员的类是相等的,或者如果指向对象在成员上相等,您可能只认为它们相等.或者它们可能是(注意:这里的坏习惯,但人们仍然这样做)指向一些随机地址,因为它们尚未初始化并且取消引用它们将导致崩溃("你"可能因为一些标志变量而知道这一点,但是当它试图"帮助"取消引用时,C++就不会这样做了.