std::chrono::year_month_day_last 연산자

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

std::chrono::year_month_day_last 값을 비교하는 비교 연산자들이에요. 연·월(마지막 날)을 순서대로 비교해요. C++20부터 있어요.

출처: cppreference

본문

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

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

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

year_month_day_lastxy를 비교해요. 사전식 비교로, 먼저 year()를 비교하고 그다음 month()를 비교해요(일은 항상 "마지막 날"이므로 월 비교로 결정돼요).

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

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

참고로 두 값이 모두 유효한(그 달의 실제 마지막 날을 나타내는) 날짜라면 sys_days로 변환해 비교한 결과와 일치해요.

예제를 보면요.

#include <chrono>
#include <iostream>

int main()
{
    using namespace std::chrono;
    constexpr year_month_day_last a{year(2023)/February/last};
    constexpr year_month_day_last b{year(2023)/February/last};
    static_assert(a == b);
    std::cout << (a <=> b) << '\n';
}

이렇게 "연/월의 마지막 날" 값들을 비교할 수 있어요.

더 알아보기 (Learn more)

cppreference