在我的课程中,我经常通过返回operator!=
来快速!(*this == rhs)
,例如:
class Foo
{
private:
int n_;
std::string str_;
public:
...
bool operator==(const Foo& rhs) const
{
return n_ == rhs.n_ && str_ == rhs.str_;
}
bool operator!=(const Foo& rhs) const
{
return !(*this == rhs);
}
};
我无法看到这样做有任何明显的问题,但我想我会问是否有人知道。
答案 0 :(得分:11)
我认为这是实施operator!=
的首选方法,因此您不会重复自己,并且与operator==
保持正确的关系。
答案 1 :(得分:3)
将operator!=
定义为!operator==
就好了
为了轻松定义这些简单的等效运算符,我总是使用Boost.Operators。
只有operator==
和operator!=
(即使用equality_comparable<>)的情况不会获得太多收益。
但是当你需要更少和更多,或者operator+
,operator*
等的某种组合时,这变得非常方便。
您的案例将以
为例class Foo : private boost::equality_comparable< Foo >
{
private:
int n_;
std::string str_;
public:
...
bool operator==(const Foo& rhs) const
{
return n_ == rhs.n_ && str_ == rhs.str_;
}
};
答案 2 :(得分:0)
不,这绝对没问题 - 我做的完全一样。