default_comparisons — 기본 비교 연산
default_comparisons — 기본 비교 연산 (Default comparisons)
**기본 비교 연산(defaulted comparison operator)**은 비교 연산자 함수를 명시적으로 = default로 지정해서, 컴파일러가 클래스에 대한 기본 비교를 생성하게 하는 기능이에요.
<=>(우주선 연산자), ==, !=, <, >, <=, >= 같은 비교 연산자를 기본화할 수 있어요. 클래스의 멤버를 순서대로 비교하는 동작을 컴파일러가 자동으로 생성해줘요.
출처: cppreference
본문
**기본화된 비교 연산자 함수(defaulted comparison operator function)**는 다음 모든 조건을 만족하는 비템플릿 비교 연산자 함수(즉 <=>, ==, !=, <, >, <=, >=)예요.
- 어떤 클래스
C의 비정적 멤버이거나friend이에요. C에서, 또는C가 완전한 타입인 문맥에서= default로 정의돼요.const C&타입의 매개변수 두 개, 또는C타입의 매개변수 두 개를 가져요. 이때 (있다면) 묵시적 객체 매개변수가 첫 번째 매개변수로 간주돼요.
기본화된 비교를 생성할 때, 클래스 C에 대해 다음과 같은 순서로 **부분 객체 목록(subobject list)**이 만들져요.
C의 직접 기반 클래스 부분 객체, 선언 순서대로C의 비정적 데이터 멤버, 선언 순서대로- 어떤 멤버 부분 객체가 배열 타입이면, 인덱스가 증가하는 순서의 원소 시퀀스로 확장돼요. 확장은 재귀적이에요. 배열 원소가 또 배열 타입이면 원소가 더 이상 없을 때까지 다시 확장돼요.
struct Point {
int x, y;
auto operator<=>(const Point&) const = default; // 멤버를 순서대로 비교
};
Point a{1, 2}, b{1, 3};
bool r = (a < b); // x 비교 후 같으면 y 비교
operator<=>를 기본화하면 <, <=, >, >=가 자동으로 파생돼요. ==를 기본화하면 !=가 파생돼요. 이렇게 되면 클래스마다 반복적인 비교 코드를 직접 쓰지 않아도 되고, 구조적으로 올바른 비교가 생성돼요.