문제

수업에서 나는 종종 빨리 씁니다 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_;
   }

};

아니, 그것은 절대적으로 괜찮습니다 - 나는 똑같이합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top