Namespaces
Variants

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

From cppreference.net
Определено в заголовочном файле <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) A std::chrono::months representing the distance between m1 and 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));
}

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

увеличивает или уменьшает месяц
(public member function)
добавляет или вычитает количество месяцев
(public member function)