“default comparison” feature 를 기록해본다
c++20 은 가장최근에 최근최근에 공인된 표준이기에 자료도적을것이고 관련자료를 만들어둘경우 유입, 공부도 더 동기부여가 될것으로 보여 따로 하나씩 기록해 두려 한다
(다만 착각,실수,핑계,등으로 정확하지 않은 정보가 될 수 있어 읽어보신분들께서 의견주시면 그때그때 바로 제대로된 정보로 수정하겠습니다)
#include <stdio.h> #include <cassert> #include <set> struct Point { int x; int y; auto operator<=>(const Point& other) const = default; bool operator==(const Point& other) const = default; }; int main() { Point pt1{ 1, 1 }, pt2{ 1, 2 }; assert(!(pt1 == pt2)); std::set<Point> s; s.insert(pt2); s.insert(pt1); for (auto el : s) { printf("%d, %d \n", el.x, el.y); } }
Defaulting <=>
automatically gives ==, !=, <, >, <=, >=
C++20 has a new “default comparison” feature setup so that defaulting
https://stackoverflow.com/questions/47466358/what-is-the-spaceship-three-way-comparison-operator-in-c<=>
gives all the others for free. I believe that this has been the major motivation behind the addition ofoperator<=>
.
- <=> 연산자 오버로딩은 다른 >,<,>=,>=, ==, != 를 모두 한번에 리턴할 수 있다
- -1,0,1 의 값으로 크다 작다 같다를 리턴 함으로서 위 부호를 모두 커버할 수 있게 된다
코드상 set 에 대한 내용이 들어간 것은 set 은
대략 set 은 비교연산자가 필요하다..
비교연산자를 <=> 로 대체하는것을 보여준다
bool operator==(const Point& other) const = default;
default comparison 은 위와같은 선언을 통해 struct/class 의 element 에 대한 연산에 대해서 기본 element 순서대로의 비교 하는 함수를 직접 작성하지 않아도 된다
다만 자동으로 처리해주는 것은 ‘순서대로’ 이므로 순서와 상관없이 연산결과를 갖고 싶을 땐 직접 함수 내용을 작성 해 주어야 한다
추가로 friend
return-typeoperator
op(const
class-name&,const
class-name&) = default;
friend
return-type operator
op(
class-name,
class-name ) = default;
return-type :
Return type | Operators | Equivalent values are.. | Incomparable values are.. |
---|---|---|---|
std::strong_ordering | == != < > <= >= | indistinguishable | not allowed |
std::weak_ordering | == != < > <= >= | distinguishable | not allowed |
std::partial_ordering | == != < > <= >= | distinguishable | allowed |
의 경우 차후 정리해보자..
- 내용이 모자라거나 틀릴 수 있어 작성 후 다듬을 예정 입니다.
댓글 남기기