문제
수업에서 나는 종종 빨리 씁니다 operator!=
돌아와서 !(*this == rhs)
, EG :
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);
}
};
나는 이것을하는 데있어 명백한 문제를 볼 수 없지만 누군가가 알고 있는지 물어볼 것이라고 생각했다.
해결책
나는 그것이 선호하는 구현 방법이라고 생각합니다 operator!=
당신이 자신을 반복하지 않고, 당신은 올바른 관계를 보장합니다. operator==
.
다른 팁
정의 operator!=
~처럼 !operator==
괜찮습니다
이러한 사소한 동등한 연산자를 쉽게 정의하기 위해 항상 사용합니다. 부스트. 오퍼레이터.
전용 사례 operator==
그리고 operator!=
(즉, 사용 평등 _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_;
}
};
아니, 그것은 절대적으로 괜찮습니다 - 나는 똑같이합니다.
제휴하지 않습니다 StackOverflow