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';
}