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) |
dy.count() лет к ym.dm.count() месяцев к ym.dy.count() лет из ym.dm.count() месяцев из ym.ym1 и ym2.Для длительностей, преобразуемых как в std::chrono::years, так и в std::chrono::months, предпочтение отдается перегрузкам years (1,2,5), если в противном случае вызов был бы неоднозначным.
Возвращаемое значение
std::chrono::year_month(ym.year() + dy, ym.month())
year_month z такое, что z - ym == dm и z.ok() == true.ym + -dy
ym + -dm
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 на заданное количество месяцев или лет (открытая функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/chrono/year_month/operator_arith_2