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



在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};

基本原理是我想为weekday提供一些支持,即!ok()。例如:

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

也就是说,对于大于[0,6]的某个范围,算术是模7。这是一个实验,我想还在进行中。这种支持没有被纳入C++20规范。

最新更新