Namespaces
Variants

std::chrono:: operator+, std::chrono:: operator- (std::chrono::year_month)

From cppreference.net
constexpr std:: chrono :: year_month operator + ( const std:: chrono :: year_month & ym,
const std:: chrono :: years & dy ) noexcept ;
(1) (начиная с C++20)
constexpr std:: chrono :: year_month operator + ( const std:: chrono :: years & dy,
const std:: chrono :: year_month & ym ) noexcept ;
(2) (начиная с C++20)
constexpr std:: chrono :: year_month operator + ( const std:: chrono :: year_month & ym,
const std:: chrono :: months & dm ) noexcept ;
(3) (начиная с C++20)
constexpr std:: chrono :: year_month operator + ( const std:: chrono :: months & dm,
const std:: chrono :: year_month & ym ) noexcept ;
(4) (начиная с C++20)
constexpr std:: chrono :: year_month operator - ( const std:: chrono :: year_month & ym,
const std:: chrono :: years & dy ) noexcept ;
(5) (начиная с C++20)
constexpr std:: chrono :: year_month operator - ( const std:: chrono :: year_month & ym,
const std:: chrono :: months & dm ) noexcept ;
(6) (начиная с C++20)
constexpr std:: chrono :: months operator - ( const std:: chrono :: year_month & ym1,
const std:: chrono :: year_month & ym2 ) noexcept ;
(7) (начиная с C++20)
1,2) Добавляет dy. count ( ) лет к ym .
3,4) Добавляет dm. count ( ) месяцев к ym .
5) Вычитает dy. count ( ) лет из ym .
6) Вычитает dm. count ( ) месяцев из ym .
7) Возвращает разницу в месяцах между двумя точками времени, представленными ym1 и ym2 .

Для длительностей, которые конвертируются как в std::chrono::years , так и в std::chrono::months , перегрузки years (1,2,5) имеют приоритет, если вызов иначе был бы неоднозначным.

Содержание

Возвращаемое значение

1,2) std:: chrono :: year_month ( ym. year ( ) + dy, ym. month ( ) )
3,4) Значение year_month z такое, что z - ym == dm и z. ok ( ) == true .
5) ym + - dy
6) ym + - dm
7)
ym1. year ( ) - ym2. year ( ) + std:: chrono :: months ( int ( unsigned ( ym1. month ( ) ) ) -
int ( unsigned ( ym2. month ( ) ) ) )

Примечания

Результат вычитания двух значений year_month представляет собой длительность типа std::chrono::months . Эта единица длительности соответствует средней продолжительности григорианского месяца (30,436875 дней), и результирующая длительность не связана с фактическим количеством дней в рассматриваемом периоде времени. Например, результат выражения 2017y / 3 - 2017y / 2 равен std:: chrono :: months ( 1 ) , несмотря на то, что февраль 2017 года содержит только 28 дней.

Пример

#include <cassert>
#include <chrono>
int main()
{
    auto ym{std::chrono::year(2021)/std::chrono::July};
    ym = ym + std::chrono::months(14);
    assert(ym.month() == std::chrono::September);
    assert(ym.year() == std::chrono::year(2022));
    ym = ym - std::chrono::years(3);
    assert(ym.month() == std::chrono::month(9));
    assert(ym.year() == std::chrono::year(2019));
    ym = ym + (std::chrono::September - std::chrono::month(2));
    assert(ym.month() == std::chrono::April);
    assert(ym.year() == std::chrono::year(2020));
}

Смотрите также

изменяет year_month на указанное количество месяцев или лет
(public member function)