在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 spec。
[x.wd_ - y.wd_ >= 0
始终为真,因为weekday.wd_
是unsigned
。