为什么不能将 `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);
使用 <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);