为什么在未来方向上找到从工作日 y 到工作日 x 的一天距离必须如此复杂?
Why does finding a day distance from weekday y to weekday x in future direction have to be this complicated?
在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};
理由是我想为 !ok()
的 weekday
提供一些支持。例如:
auto x = weekday{13} - weekday{5}; // x == 1d
即,对于大于 [0, 6] 的某个范围,算法对 7 取模。这是一个实验,我想它仍在进行中。此支持未进入 C++20 spec.
在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};
理由是我想为 !ok()
的 weekday
提供一些支持。例如:
auto x = weekday{13} - weekday{5}; // x == 1d
即,对于大于 [0, 6] 的某个范围,算法对 7 取模。这是一个实验,我想它仍在进行中。此支持未进入 C++20 spec.