default comparison : c++20

“default comparison” feature 를 기록해본다
c++20 은 가장최근에 최근최근에 공인된 표준이기에 자료도적을것이고 관련자료를 만들어둘경우 유입, 공부도 더 동기부여가 될것으로 보여 따로 하나씩 기록해 두려 한다
(다만 착각,실수,핑계,등으로 정확하지 않은 정보가 될 수 있어 읽어보신분들께서 의견주시면 그때그때 바로 제대로된 정보로 수정하겠습니다)

https://en.cppreference.com/w/cpp/language/default_comparisons
#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 <=> gives all the others for free. I believe that this has been the major motivation behind the addition of operator<=>.

https://stackoverflow.com/questions/47466358/what-is-the-spaceship-three-way-comparison-operator-in-c
  • <=> 연산자 오버로딩은 다른 >,<,>=,>=, ==, != 를 모두 한번에 리턴할 수 있다
  • -1,0,1 의 값으로 크다 작다 같다를 리턴 함으로서 위 부호를 모두 커버할 수 있게 된다

코드상 set 에 대한 내용이 들어간 것은 set 은

대략 set 은 비교연산자가 필요하다..
비교연산자를 <=> 로 대체하는것을 보여준다

bool operator==(const Point& other) const = default;

default comparison 은 위와같은 선언을 통해 struct/class 의 element 에 대한 연산에 대해서 기본 element 순서대로의 비교 하는 함수를 직접 작성하지 않아도 된다

다만 자동으로 처리해주는 것은 ‘순서대로’ 이므로 순서와 상관없이 연산결과를 갖고 싶을 땐 직접 함수 내용을 작성 해 주어야 한다

추가로
friendreturn-typeoperatorop(constclass-name&,constclass-name&) = default;
friend return-type operatorop( class-name, class-name ) = default;
return-type :

Return typeOperatorsEquivalent values are..Incomparable values are..
std::strong_ordering== != < > <= >=indistinguishablenot allowed
std::weak_ordering== != < > <= >=distinguishablenot allowed
std::partial_ordering== != < > <= >=distinguishableallowed

의 경우 차후 정리해보자..

  • 내용이 모자라거나 틀릴 수 있어 작성 후 다듬을 예정 입니다.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다