Почему нахождение дневного расстояния от дня недели y до дня недели x в будущем направлении должно быть таким сложным? - PullRequest
2 голосов
/ 23 марта 2020

В libc ++ , таким образом мы находим дни от дня недели y (rhs) до дня недели x (lhs) в будущем направлении.

constexpr days operator-(const weekday& __lhs, const weekday& __rhs) noexcept
{
    const int __wdu = __lhs.c_encoding() - __rhs.c_encoding();
    const int __wk = (__wdu >= 0 ? __wdu : __wdu-6) / 7;
    return days{__wdu - __wk * 7};
}

Так же, как в date.h библиотека

CONSTCD14
inline
days
operator-(const weekday& x, const weekday& y) NOEXCEPT
{
    auto const wdu = x.wd_ - y.wd_;
    auto const wk = (wdu >= 0 ? wdu : wdu-6) / 7;
    return days{wdu - wk * 7};
}

Интересно, почему мы не можем сделать только это?

return days{x.wd_ - y.wd_ >= 0 ? x.wd_ - y.wd_ : x.wd_ - y.wd_ + 7};

1 Ответ

4 голосов
/ 23 марта 2020

Смысл в том, что я хотел предложить некоторую поддержку для weekday с !ok(). Например:

auto x = weekday{13} - weekday{5};  // x == 1d

Т.е. для некоторого диапазона больше [0, 6] арифметика c равна модулю 7. Это был эксперимент, который, я полагаю, все еще продолжается. Эта поддержка не вошла в C ++ 20 spe c.

...