==연산자는 피연산자 타입들에 대칭적이고, noexcept로 만들어라 Reason 피연산자들에 비대칭적인 처리는 기대에 부합하지 않고, 형변환이 가능한 경우 에러를 유발할 수 있다. ==는 기본적인 연산이며 프로그래머들이 이 연산을 사용할 때 연산 실패에 대한 고민이 없어야 한다. Example struct X { string name; int number; }; bool operator==(const X& a, const X& b) noexcept { return a.name == b.name && a.number == b.number; } Example, bad class B { string name; int number; bool operator==(const B& a) const { return name == a.name && number == a.number; } // ... }; B의 비교 연산은 두번째 피연산자에 대해 형변환을 용인하지만, 첫번째 피연산자에 대해서는 그렇지 않다. Note 만약 클래스가 double타입의 NaN처럼 실패 상태를 가진다면, 실패 상태와의 비교에서 예외를 던지도록 하는 것이 적합할 수도 있다. 다른 방법으로는 실패 상태끼리의 비교는 동등하게 보고, 적합한 상태와 실패 상태의 비교에서는 거짓으로 판정할 수 있다. Note 이 규칙은 모든 일반 비교 연산자들에도 적용된다 : !=, <, <=, >, >=. Enforcement 인자의 타입이 다른 operator==()를 지적하라. 다른 비교 연산자들도 마찬가지다 : !=, <, <=, >, >=. 멤버인 operator==() 함수들을 지적하라. 다른 비교 연산자들도 마찬가지다 : !=, <, <=, >, >=.