NeuroWhAI의 잡블로그

[C++] Three-way comparison 본문

개발 및 공부/언어

[C++] Three-way comparison

NeuroWhAI 2018. 9. 10. 21:26


https://en.cppreference.com/w/cpp/language/operator_comparison#Three-way_comparison

https://en.cppreference.com/w/cpp/language/default_comparisons


비교연산자...라네요...

a <=> b 일때

a < b면 0보다 작다는 것을 의미하는 객체(less)를,

a > b면 0보다 크다는 것을 의미하는 객체(greater)를,

a == b면 0을 의미하는 객체(equivalent)를 반환한다고 합니다.

왜 0보다 작은 값이면 값이지 객체냐고 물으신다면 저도 모릅니다(?)

int같은 타입이 반환형이 아니고 std::strong_ordering, std::weak_ordering 등의 클래스에 정의된 상수를 반환한다고 하네요.

class Point {
 int x;
 int y;
public:
 auto operator<=>(const Point&) const = default;
 // ... non-comparison functions ...
};
// compiler generates all six relational operators
Point pt1, pt2;
if (pt1 == pt2) { /*...*/ } // ok
std::set<Point> s; // ok
s.insert(pt1); // ok
if (pt1 <= pt2) { /*...*/ } // ok, makes only a single call to <=>

위 예제에서 보시다시피 <=> 연산자가 정의되어 있다면 이걸 이용해서 다른 비교 연산자들을 알아서 구현해주는 듯 하네요.


C++20에 생긴건가;;

아직 이걸 지원하는 컴파일러를 못찾았습니다.



Comments