operator_comparison — 비교 연산자

operator_comparison — 비교 연산자 (Comparison operators)

**비교 연산자(comparison operator)**는 두 값을 비교해 참/거짓을 판별하는 연산자들이에요. ==, !=, <, >, <=, >= 등이 있어요.

조건 분기·정렬·탐색에서 핵심적으로 사용돼요. C++20부터 세 방향 비교(spaceship, operator<=>)로 여러 비교를 자동 생성할 수 있어요.

출처: cppreference

본문

비교 연산자는 두 피연산자를 비교해 bool 값을 산출해요.

연산자 목록

  • 동등 비교==(같음), !=(다름)
  • 관계 비교<(작음), >(큼), <=(작거나 같음), >=(크거나 같음)
  • 세 방향 비교<=>(spaceship, C++20)

기본 사용

if (a == b) { }
while (x < n) { }
bool ordered = a < b;

부동 소수점 비교

부동 소수점은 정밀도 때문에 정확한 == 비교가 어려울 수 있어요. 근사 비교(|a-b| < eps) 사용이 권장되는 경우가 많아요.

포인터 비교

포인터도 비교할 수 있어요 (==, < 등). 같은 배열 안의 요소만 <로 안전하게 비교할 수 있어요.

클래스의 비교 연산자

클래스에서 비교 연산자를 오버로드해 정의할 수 있어요.

struct Point { int x, y; };
bool operator==(const Point& a, const Point& b) {
    return a.x == b.x && a.y == b.y;
}

Spaceship operator (C++20)

operator<=>를 정의하면 표준 비교 연산자(==, <, <= 등)를 자동으로 얻을 수 있어요.

struct T {
    int a;
    auto operator<=>(const T&) const = default;  // 모든 비교 자동 생성
};

<=>의 결과는 정렬 순서 종류(std::strong_ordering, std::partial_ordering, std::weak_ordering)에 따라 분류돼요.

복합 대입 비교 (없음)

<=>=는 각각 </>에 동등성 조건을 더한 것으로, 일반적으로 ! (a > b)처럼 표현할 수 있어요.

노트 (Notes)

  • C++20 전에는 ==<를 각각 정의해야 했지만, <=>로 간소화됐어요.
  • !=는 C++20에서 ==로부터 자동 생성돼요 (기본).
  • 비교 연산자 정의 시 의미(오름차순 등)를 따라야 해요.

더 알아보기 (Learn more)

cppreference