Notice
Recent Posts
Recent Comments
NeuroWhAI의 잡블로그
[C++] Three-way comparison 본문
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에 생긴건가;;
아직 이걸 지원하는 컴파일러를 못찾았습니다.
'개발 및 공부 > 언어' 카테고리의 다른 글
[C++] Structured binding 설명 (0) | 2018.09.20 |
---|---|
[Kotlin] 상속 (0) | 2018.09.15 |
[C++] CTAD; User-defined deduction guides (사용자 정의 템플릿 인자 추론 가이드) (0) | 2018.09.10 |
[C++] C++17의 Template argument deduction (템플릿 인자 추론) (0) | 2018.09.09 |
[C++] Fold Expressions (0) | 2018.09.05 |
Comments