2009-01-12 3 views
7

나는 종종 !(*this == rhs)을 반환하여 빠른 operator!= 쓰기, 예를 들면 : 나는이 일을 어떤 명백한 문제를 볼 수는 없지만 는 신속하고 더러운 연산자 = 내 수업에서

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

+1을 읽을 것입니다. 나는 이것을 깔끔하게 발견한다. – Perpetualcoder

답변

11

나는 이것이 자신을 반복하지 않도록 operator!=을 구현하는 데 선호되는 방법이라고 생각하며 operator==과의 올바른 관계를 보장합니다. !operator==operator!= 정의

0

아니요, 괜찮습니다. 정확히 똑같습니다.

2

이 사소한 해당 운영자가 쉽게 정의 점점

잘, 나는 항상 Boost.Operators를 사용합니다.
operator==operator!= (즉, equality_comparable<>을 사용하는 경우)은별로 이득을 얻지 못합니다.

하지만 너무 작거나 큰 경우 또는 operator+, operator* 등이 필요한 경우 매우 편리합니다.

사건에 대한 예는 여전히 ISEQUAL (ObjA, ObjB를) 연산자 오버로딩을 좋아하고하지 않는

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_; 
    } 

}; 
관련 문제