2013-08-17 5 views
10

operator<이있는 경우 operator>=!(a < b)으로 구현할 수 있습니다. 그러나 브리스톨의 C++위원회에 갔을 때 그들은 모두 비교 연산자를 이렇게 구현할 수 있다고 말했습니다. 특히, 비 단순한 비교 연산자를 가진 타입을 고려할 때 (임의로 긴 문자열을 고려하십시오. 특히 이것이 유니 코드 인 경우 특히 그렇습니다), operator<을 한 번만 호출하면됩니다. 어떻게 할 수 있을지 상상할 수 없습니다.다른 비교 연산자를 하나의 호출로 구현하면

operator<=operator<을 한 번만 호출하면 구현할 수 있으며 다른 비교 연산자는 사용할 수 없습니까?

+0

나는 단지'<'하지만 ['std :: rel_ops'] (http://en.cppreference.com/w/cpp/utility/rel_ops/operator_cmp)가'==' '<' –

+0

당신 자신의 예제와 동일 :'a> b'는'! (a == b || a usr2564301

+0

그것은 연산자 ==도 마찬가지로 하나의 호출을 포함합니다. 이것은 분명히 사용자 정의 연산자보다 성능이 떨어집니다. – Puppy

답변

16
  • a > b == b < a
  • a <= b == !(b < a)
  • a >= b == !(a < b)

이 (여기 내 메타 구문 학대의 종류를) 미만의 관점에서 평등을 구현도 가능하다 :

  • (a == b) == (!(a < b) && !(b < a))
  • (a != b) == (a < b || b < a)

실제로 두 가지 비교가 필요하므로 일반적으로 더 효율적으로 직접 구현할 수 있기 때문에 실제는 권장하지 않습니다.

+0

내가 본 :-) 주석을 제거했습니다 – xanatos

+2

이것은 SQL에서와 같이 3- 상태 논리를 구현하려는 경우 명확하게 작동하지 않습니다 – xanatos

+1

+1 그리고 마지막 하나 ... (! (a xanatos

관련 문제