为什么不能将 `std::chrono::hours` 添加到 `std::chrono::sys_days`

Why is it not possible to add a `std::chrono::hours` to a `std::chrono::sys_days`

使用 <chrono> 库迈出第一步, 我从天数 time_point 的基本算术开始。 感谢@HowardHinnant 非常有用的 post, 我设法写 this:

#include <chrono>
using namespace std::chrono_literals;

int main()
{
    std::chrono::sys_days d {std::chrono::January/31/2022};
    d += std::chrono::days{2}; // ok
    //d += 48h; // error: no match for 'operator+=' with std::chrono::hours
}

我不清楚为什么 d += 48h; 是不允许的。 std::chrono::time_point<>::operator+= 需要一个 duration, 该表达式中的 rvalue 是一个 std::chrono::hours 在我看来代表一个持续时间。 这里的理念是什么?是否有不同的持续时间类型 根据必须与兼容的测量单位 time_point 的粒度?为什么?

另一方面,我理解为什么d += 2d;报错, 因为在这种情况下 std::literals::chrono_literals::operator""d 是一个 std::chrono::day,它不是持续时间(这很方便 形成一个日期文字,虽然看起来有点不一致 大部头书)。 请问有没有更方便的表达方式 相当于 std::chrono::days{2}.

的持续时间文字

您可以将小时数增加到天数。您不能做的是再次将其隐式转换为天数。 You need a cast

d = std::chrono::time_point_cast<std::chrono::days>(d + 48h);