Mat*_*atG 5 c++ duration literals c++-chrono
迈出使用库的第一步<chrono>,我从日常的基本算术开始time_point。感谢 @HowardHinnant 的一篇非常有用的帖子,我成功地写了这个:
#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
}
Run Code Online (Sandbox Code Playgroud)
我不清楚的是为什么d += 48h;不允许。需要std::chrono::time_point<>::operator+=a duration,该表达式中的右值std::chrono::hours是 a在我看来代表持续时间。这里的哲学是什么?根据度量单位是否有不同的持续时间类型必须与粒度兼容time_point?为什么?
另一方面,我理解为什么d += 2d;会给出错误,因为在本例中std::literals::chrono_literals::operator""d
是 a std::chrono::day,它不是持续时间(这很容易形成日期文字,尽管对我来说似乎有点不一致)。我想知道是否有更方便的方法来表达相当于 的持续时间文字std::chrono::days{2}。
您可以将小时数添加到天数。你不能做的就是再次将其隐式转换为天数。你需要一个演员阵容
d = std::chrono::time_point_cast<std::chrono::days>(d + 48h);
Run Code Online (Sandbox Code Playgroud)