gpt4 book ai didi

c++ - 当你比较两个对象时会发生什么?

转载 作者:太空狗 更新时间:2023-10-29 23:26:08 25 4
gpt4 key购买 nike

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

class Foo
{
private:
int bar;

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

最佳答案

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

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

return this->bar == other.bar;

哪个最有可能满足您的需求。

您可能不希望 C++ 对相等性“智能”并自动进行成员比较的原因之一是,您对“相等性”的含义可能与 C++ 标准主体有截然不同的想法。

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

关于c++ - 当你比较两个对象时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1197357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com