'=='오버로드가 '! ='를 얻습니까?
==
구조체에 대한 연산자를 수동으로 오버로드하면 연산자를 !=
무료로 얻 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
'developer tip' 카테고리의 다른 글
"ipch"폴더 (미리 컴파일 된 헤더)를 삭제해도 안전합니까? (0) | 2020.12.01 |
---|---|
.net ORM 비교 (0) | 2020.12.01 |
테두리 반경이 콘텐츠를 잘라야합니까? (0) | 2020.12.01 |
pip를 사용하여 패키지의 종속성 나열 (0) | 2020.12.01 |
Windows 작업 스케줄러 오류 101 시작 실패 코드 2147943785 (0) | 2020.12.01 |