std::chrono::year_month_day_last operator+ / operator-

std::chrono::year_month_day_last operator+ / operator- (산술 연산)

std::chrono::year_month_day_last에 몇 년 또는 몇 달을 더하거나 빼는 산술 연산자들이에요. C++20부터 있어요.

출처: cppreference

본문

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

constexpr std::chrono::year_month_day_last
    operator+( const std::chrono::year_month_day_last& ymdl,
               const std::chrono::months& dm ) noexcept;   // (1)

constexpr std::chrono::year_month_day_last
    operator+( const std::chrono::months& dm,
               const std::chrono::year_month_day_last& ymdl ) noexcept;   // (2)

constexpr std::chrono::year_month_day_last
    operator-( const std::chrono::year_month_day_last& ymdl,
               const std::chrono::months& dm ) noexcept;   // (3)

constexpr std::chrono::year_month_day_last
    operator+( const std::chrono::year_month_day_last& ymdl,
               const std::chrono::years& dy ) noexcept;    // (4)

constexpr std::chrono::year_month_day_last
    operator+( const std::chrono::years& dy,
               const std::chrono::year_month_day_last& ymdl ) noexcept;  // (5)

constexpr std::chrono::year_month_day_last
    operator-( const std::chrono::year_month_day_last& ymdl,
               const std::chrono::years& dy ) noexcept;    // (6)

ymdl에서 몇 달(dm) 또는 몇 년(dy)을 더하거나 뺀 결과를 돌려줘요. 결과는 대응하는 ymdl 멤버(operator+=/operator-=와 같은 규칙)에 적용한 것과 같아요. 즉 어떤 달의 "마지막 날"에 수 개월을 더하면 그달의 "마지막 날"이 유지돼요.

예를 들어 2023년 8월의 마지막 날(2023/Aug/last)에 1개월을 더하면 2023년 9월의 마지막 날(2023/Sep/last)이 돼요. 연·월 산술이 직접 지원되고, sys_days 변환을 통한 일 단위 산술과도 일관적이에요.

  • 반환 값: ymdl에 해당하는 월/년을 반영한 year_month_day_last.
#include <chrono>
#include <iostream>

int main()
{
    using namespace std::chrono;
    auto ymdl = 2023y / August / last;
    auto next = ymdl + months{1};   // 2023/Sep/last
    auto prev_year = ymdl - years{1}; // 2022/Aug/last
    std::cout << next << '\n' << prev_year << '\n';
}

더 알아보기 (Learn more)

cppreference