为什么要在未来的方向上找到从工作日y到工作日x的日间距离必须如此复杂?

问题描述 投票:1回答:2

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};
c++ chrono c++20 libc++
2个回答
0
投票

理由是我想为weekday!ok()提供一些支持。例如:

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

即,对于大于[0,6]的某个范围,该算术是模7。这是一个实验,我想它仍在进行中。此支持未纳入C++20 spec


0
投票

[x.wd_ - y.wd_ >= 0始终为真,因为weekday.wd_unsigned

© www.soinside.com 2019 - 2024. All rights reserved.