Spec-Zone.ru › C++

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

constexpr std::chrono::year operator+( const std::chrono::year& y,
                                       const std::chrono::years& ys ) noexcept;
(1) (начиная с C++20)
constexpr std::chrono::year operator+( const std::chrono::years& ys,
                                       const std::chrono::year& y ) noexcept;
(2) (начиная с C++20)
constexpr std::chrono::year operator-( const std::chrono::year& y,
                                       const std::chrono::years& ys ) noexcept;
(3) (начиная с C++20)
constexpr std::chrono::years operator-( const std::chrono::year& y1, 
                                        const std::chrono::year& y2 ) noexcept;
(4) (начиная с C++20)
1,2) Прибавляет ys.count() лет к y.
3) Вычитает ys.count() лет из y.
4) Возвращает разницу в годах между y1 и y2.

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

1,2) std::chrono::year(int(y) + ys.count())
3) std::chrono::year(int(y) - ys.count())
4) std::chrono::years(int(y1) - int(y2))

Примечания

Если полученное значение года для (1-3) выходит за пределы диапазона [-32767, 32767], фактически сохранённое значение не определено.

Результат вычитания двух значений year — это длительность типа std::chrono::years. Эта единица длительности представляет длину среднего григорианского года, поэтому полученная длительность не связана с количеством дней в конкретных годах, представленных операндами. Например, результат 2018y - 2017y — это std::chrono::years(1), что соответствует 365,2425 дня, а не 365 дням.

Пример

#include <cassert>
#include <chrono>

int main()
{
    std::chrono::year y{2020};

    y = std::chrono::years(12) + y; // overload (2): duration + time point
    assert(y == std::chrono::year(2032));

    y = y - std::chrono::years(33); // overload (3): time point - duration
    assert(y == std::chrono::year(1999));

    // y = std::chrono::years(33) - y; // not supported: duration - time point

    using namespace std::chrono;
    constexpr std::chrono::years ys = 2025y - 2020y; // overload (4)
    static_assert(ys == std::chrono::years(5));
}

См. также

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

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

Spec-Zone.ru

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