Spec-Zone.ru › C++

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

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

См. также

operator+=operator-=
изменяет year_month на заданное количество месяцев или лет
(открытая функция-член)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/chrono/year_month/operator_arith_2

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API