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에서==로부터 자동 생성돼요 (기본).- 비교 연산자 정의 시 의미(오름차순 등)를 따라야 해요.