developer tip

'=='오버로드가 '! ='를 얻습니까?

copycodes 2020. 12. 1. 08:21
반응형

'=='오버로드가 '! ='를 얻습니까?


==구조체에 대한 연산자를 수동으로 오버로드하면 연산자를 !=무료로 return !(this == rhs)습니까 (아마도 부울 반대 값으로 정의 됨) 아니면 수동으로 오버로드해야 합니까 ( 단순히 ?

편집-문제는 두 연산자를 모두 오버로드 할 수 있는지 여부가 아니라 이미 같음 연산자를 오버로드 한 경우 부등식을 오버로드해야하는지 여부입니다. 그럼에도 불구하고 좋은 답변이 주어졌습니다.


과부하 operator ==는 당신에게주지 않습니다 operator !=. 수동으로해야하며 표준적인 방법은에서와 같이 구현하는 것 operator ==입니다 !(left == right).

연산자의 의미는 표준에 의해 지시되지 않습니다. operator ==평등을 의미하는 오버로드 할 수 있지만 operator !=덧셈이나 평등과 같은 다른 것에 다시 오버로드 할 수 있습니다 (좋은 습관이 아니라 실제로는 권장하지 않습니다. 의심스러운 경우 int처럼 수행합니다 ...) . [ 아래 (1) 참조]

참고로 Boost.Operators는 운영자에게 표준 구현을 제공하는 데 도움이 될 수 있습니다. 또한이 std::rel_ops에 대한 표준 구현 operator !=.

(1) 이에 대한 자세한 내용 은 C ++에서 연산자 오버로딩의 세 가지 기본 규칙을 읽어보십시오 .


공짜는 없습니다. C ++에서 사용한만큼 비용을 지불합니다 (연산자 오버로딩의 경우).
더 이상 과부하가 걸리지 않는 연산자 만 얻습니다.

또한 ==연산자를 오버로드하면 !=클래스의 사용자가 사용할 수있을 것으로 기대하기 때문에 오버로드해야하는 것도 좋은 방법입니다 .

연산자 오버로딩 C ++ FAQ는 잘 읽어야합니다.


업데이트 된 질문에 답하기 :

문제는 두 연산자를 모두 오버로드 할 수 있는지 여부가 아니라 이미 같음 연산자를 오버로드 한 경우 부등식을 오버로드해야하는지 여부입니다.

아니. 과부하 가 필요한 경우 반드시 과부하 해야하는
요구 사항은 없습니다 . 그러나, 당신이하는 좋은 연습입니다 할까요 사업자 과부하 와 관련된 서로가.!===

왜 좋은 습관입니까?
학급 사용자의 관점에서 생각하십시오. 클래스의 사용자가 ==(동등 기준)을 사용하여 클래스의 객체를 비교할 수 있다면 당연히 !=(비동 등 기준)도 사용할 수 있어야한다고 예상하게 될 것입니다. 이는이 두 연산자가 밀접하게 관련되어 있으며 모든 내장형 타이에 대해 지원됩니다.

무엇 당신이를 무시하면 어떻게됩니까 should및 과부하가 걸리지 !=당신이 과부하시 ==?
클래스의 사용자가 사용 !=하면 컴파일 오류가 발생합니다.
그들은 약에서는 제공되지 않습니다 조금 싫은 내색을 것이다 !=그들이 제공하는 경우 ==그들이 사용하는 자신의 논리를 다시 정렬해야합니다 ==대신의 !=.

따라서 당신은 그것으로 살 수 있지만 약간의 찡그린 얼굴과 불편함에 대한 불만을 예상하고 사용자 친화적 인 인터페이스를 제공하지 않을 준비가되어 있습니다.


각 연산자를 오버로드해야합니다. ! = 및 ==는 연결되지 않습니다.


그렇지 않습니다. 고맙게도 그대로입니다. 예를 들어, a! = b 및 a == a가 모두 참인 구조를 원할 수 있습니다. 그 반대의 경우는 필요하지 않으며 원하는 모든 것이 될 수 있습니다.

창의력을 높입니다. :)

예를 들어 비교 결과를 모르거나 일반적으로 알려지지 않은 경우 a == b와 a! = b가 동일한 결과를 반환하는 것이 합리적입니다.

예 : http://en.wikipedia.org/wiki/Three-valued_logic

참고 URL : https://stackoverflow.com/questions/8000530/does-overloading-get-you

반응형