首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重载operator==

重载operator==
EN

Stack Overflow用户
提问于 2011-07-29 19:22:10
回答 4查看 397关注 0票数 3

伙计们,我有一些愚蠢的结构,我们称它为X,我还有一个fnc (不是它的成员)返回一个指向这个结构的指针,所以它看起来是这样的:

代码语言:javascript
复制
    struct  X
    {
bool operator==(const X* right)
{
//...
}
};

X* get(X* another)
{
//...
}

我在代码中也有一行代码“尝试”比较指向这些结构的指针,但真正的目的是比较那些指向的结构:

代码语言:javascript
复制
if (get(a) == get(b))//here obviously I have two pointers returned to be compared
{
//...
}

我还定义了X operator==(const X* right)的成员,它应该在上面提到的情况下工作,但我不明白它不能工作。如何让它工作(我不能改变行if (get(a) == get(b)),而且get必须返回指针)。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-07-29 19:25:10

您不能更改比较指针的方式。您必须更改if语句的语法,或者更改get()以返回引用而不是指针。任何其他的解决方案都将是相当老套的。

如果你真的必须接受这些限制,我建议你改变get(),返回某种特殊的智能指针,用重载的operator ->()和重载的operator ==()封装你想要的这种不一致的行为。我发誓,这真的是在自找麻烦,我认为您最好还是与任何不允许您更改if()语句的力量作斗争。

票数 3
EN

Stack Overflow用户

发布于 2011-07-29 19:26:25

这是行不通的:您的类型是指针,您不能重载内置类型的运算符。因此,首先,通过取消引用进行比较:

代码语言:javascript
复制
T * a, * b;

if (*a == *b) { ... }

接下来,要实现这一点,必须实现T的运算符:

代码语言:javascript
复制
struct T {
  bool operator==(const T & other) const { ... }
  /* ... */
};

请注意,运算符应该是const,并通过const引用获取右侧参数!

参考你的最后一句话:如果你不能改变get(a) == get(b) ,你也不能改变get的类型,那么你就只能比较指针了。

票数 3
EN

Stack Overflow用户

发布于 2011-07-29 19:26:50

如果您不能更改行get(a) == get(b),也不能更改get(),那么您尝试实现的目标是不可能实现的。

只有在至少有一个操作数属于用户定义类型(或对用户定义类型的引用)的情况下,才能定义重载运算符。指向类的指针不符合这个要求,所以你不能定义一个运算符,这个运算符将在比较两个指针的地方调用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6872347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档