나는 C ++에서 연산자 오버로딩에 대해 배우고, 나는 그것을보고 ==
및 !=
사용자 정의 형식 사용자 정의 할 수있는 몇 가지 특별한 기능은 간단하다. 그러나 내 관심사는 왜 두 개의 별도 정의가 필요한가? 나는 경우 생각 a == b
사실, 다음 a != b
, 정의, 때문에, 반대로 자동으로 거짓, 그리고 그 반대이며, 다른 가능성이없는 a != b
것입니다 !(a == b)
. 그리고 이것이 사실이 아닌 상황을 상상할 수 없었습니다. 그러나 아마도 내 상상력이 제한적이거나 무언가에 대해 무지한가?
나는 다른 하나의 관점에서 하나를 정의 할 수 있다는 것을 알고 있지만 이것은 내가 요구하는 것이 아닙니다. 또한 가치 또는 정체성에 의해 객체를 비교하는 것의 차이점에 대해서도 묻지 않습니다. 또는 두 객체가 동시에 같거나 같지 않을 수 있는지 여부 (이것은 분명히 옵션이 아닙니다! 이러한 것들은 상호 배타적입니다). 내가 묻는 것은 이것입니다.
어떤 상황이 수 있는가하는 두 개의 오브젝트가 동일한 메이크업 감각을 수행되고 있지만, 그들에 대한 질문에 대한 질문 요청 하지 이해가되지 않습니다 같다고을? (사용자 관점 또는 구현 자의 관점에서)
그러한 가능성이 없다면, 왜 지구상에서 C ++가 왜이 두 연산자가 두 개의 별개의 함수로 정의되어 있습니까?
'undefined' != expression
표현식을 평가할 수 있는지 여부에 관계없이 항상 참 (또는 거짓 또는 정의되지 않음)으로 정의 할 수 있습니다. 이 경우 a!=b
정의에 따라 올바른 결과를 반환하지만 평가할 수 없으면 !(a==b)
실패합니다 b
. (평가 b
가 비싼 경우 많은 시간이 걸립니다 ).
(NaN != NaN) == true