首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++:重载!=当==重载时

C++:重载!=当==重载时
EN

Stack Overflow用户
提问于 2012-09-05 05:36:13
回答 2查看 570关注 0票数 3

假设我有一个重载操作符==的类,如下所示:

代码语言:javascript
复制
Class A {
  ...
  public:
    bool operator== (const A &rhs) const;
  ...
};

...

bool A::operator== (const A &rhs) const {
  ..
  return isEqual;
}

我已经让操作符==返回了正确的布尔值。现在我想将其扩展到简单的对立面(!=)。我想调用重载的==操作符并返回相反的结果,即

代码语言:javascript
复制
bool A::operator!= (const A &rhs) const {
  return !( this == A );
}

这个是可能的吗?我知道this不会工作,但它体现了我想要的东西。我只想为调用保留一个参数:rhs。任何帮助都将不胜感激,因为我在几次搜索尝试后都找不到答案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-05 05:37:47

你差一点就成功了:

代码语言:javascript
复制
bool A::operator!= (const A &rhs) const {
  return !( *this == rhs );
}

注意,this是一个指针,而不是对象。您需要取消引用它。需要注意的是,通常最好将大多数二元运算符实现为自由函数,而不是成员函数。

票数 9
EN

Stack Overflow用户

发布于 2012-09-05 05:45:56

您不必在单个(每个类)的基础上执行此操作。

标准库已经为这种方法提供了支持,通过声明运算符!=><=>=的“默认”模板实现,这些运算符依赖于用户提供的运算符==<。这些声明位于标头<utility>中,并包含在名称空间std::rel_ops中。

由于这些实现是在命名空间std::rel_ops中声明的,因此默认情况下不会通过名称查找找到它们。如果您想在程序中“激活”这些定义,请执行以下操作

代码语言:javascript
复制
#include <utility>
using namespace std::rel_ops;

例如,这将自动从您的operator ==实现中为翻译单元中的所有类派生operator !=。您仍然可以通过为某些特定类提供运算符!=的显式实现来覆盖该机制。

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

https://stackoverflow.com/questions/12271677

复制
相关文章

相似问题

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