std::chrono::year_month_day 연산자

std::chrono::year_month_day 연산자 (operator==, <=> 등)

std::chrono::year_month_day 값을 비교하는 비교 연산자들이에요. 연·월·일을 순서대로 사전식으로 비교해요. C++20부터 있어요.

출처: cppreference

본문

<chrono> 헤더에 정의돼 있고, year_month_day용 비교 연산자예요.

constexpr bool operator==( const std::chrono::year_month_day& x,
                           const std::chrono::year_month_day& y ) noexcept;  // (1)

constexpr std::strong_ordering
    operator<=>( const std::chrono::year_month_day& x,
                 const std::chrono::year_month_day& y ) noexcept;             // (2)

year_month_dayxy를 비교해요. 이는 사전식 비교로, 먼저 year()를 비교하고, 그다음 month(), 마지막으로 day()를 비교해요.

<, <=, >, >=, != 연산자는 각각 operator<=>operator==로부터 합성(synthesized)돼요.

  • 반환 값:
    • (1) x.year() == y.year() && x.month() == y.month() && x.day() == y.day()
    • (2) x.year() <=> y.year이 0이 아니면 그 값, 아니면 x.month() <=> y.month()이 0이 아니면 그 값, 아니면 x.day() <=> y.day().

참고로 xy가 모두 유효한 날짜를 나타내면(x.ok() && y.ok() == true), 사전식 비교 결과가 달력 순서와 일치해요.

예제를 보면요.

#include <chrono>

int main()
{
    constexpr auto ymd1{std::chrono::day(13)/7/1337};
    constexpr auto ymd2{std::chrono::year(1337)/7/13};
    static_assert(ymd1 == ymd2);
    static_assert(ymd1 <= ymd2);
    static_assert(ymd1 >= ymd2);
    static_assert(ymd1 <=> ymd2 == 0);
}

이렇게 year_month_day 값들을 연산자로 직접 비교할 수 있어요. 연·월·일 세 필드가 모두 같아야 동등하고, 그 외엔 사전식 순서로 비교 결과가 정해져요.

더 알아보기 (Learn more)

cppreference