Spec-Zone.ru › C++

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

Определено в заголовочном файле <chrono>
constexpr std::chrono::month operator+( const std::chrono::month& m,
                                        const std::chrono::months& ms ) noexcept;
(1) (начиная с C++20)
constexpr std::chrono::month operator+( const std::chrono::months& ms,
                                        const std::chrono::month& m ) noexcept;
(2) (начиная с C++20)
constexpr std::chrono::month operator-( const std::chrono::month& m, 
                                        const std::chrono::months& ms ) noexcept;
(3) (начиная с C++20)
constexpr std::chrono::months operator-( const std::chrono::month& m1, 
                                         const std::chrono::month& m2 ) noexcept;
(4) (начиная с C++20)
1,2) Прибавляет ms.count() месяцев к m. Значение месяца, хранящееся в результате, вычисляется сначала посредством вычисления static_cast<long long>(unsigned(m)) + (ms.count() - 1), приведения его по модулю 12 к целому числу в диапазоне [0, 11], а затем прибавления 1.
3) Вычитает ms.count() месяцев из m и возвращает результат. Эквивалентно return m + -ms;.
4) Если m1.ok() и m2.ok() оба являются true, возвращает значение std::chrono::months m, такое что m.count() находится в диапазоне [0, 11] и m2 + m == m1. В противном случае возвращаемое значение не определено.

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

1-3) std::chrono::month, содержащий значение месяца, вычисленное описанным выше способом.
4) std::chrono::months, представляющий расстояние между m1 и m2.

Примечания

Пока вычисление не приводит к переполнению, (1-3) всегда возвращают допустимое значение месяца, даже если m.ok() является false.

Результат вычитания двух значений month — это интервал типа std::chrono::months. Единица этого интервала представляет собой длительность среднего григорианского месяца, и полученный интервал никак не связан с количеством дней в конкретных месяцах, представленных операндами. Например, std::chrono::seconds(std::chrono::April - std::chrono::March) — это не количество секунд в марте (2678400s), а 2629746s (30,436875 дня).

Пример

#include <cassert>
#include <chrono>

int main()
{
    std::chrono::month m{6};

    m = m + std::chrono::months(2);
    assert(m == std::chrono::month(8));

    m = m - std::chrono::months(3);
    assert(m == std::chrono::month(5));
 
    constexpr std::chrono::months ms = std::chrono::month(8) - std::chrono::month(6);
    static_assert(ms == std::chrono::months(2));
}

См. также

operator++operator++(int)operator--operator--(int)
увеличивает или уменьшает месяц
(открытая функция-член)
operator+=operator-=
прибавляет или вычитает количество месяцев
(открытая функция-член)

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

Spec-Zone.ru

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