在使用<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
}我不清楚的是为什么不允许使用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}的持续时间文本。
发布于 2022-01-11 10:31:44
你可以把时间增加到几天。你不能做的就是再次隐式地将它转换为天。你需要一个演员
d = std::chrono::time_point_cast<std::chrono::days>(d + 48h);https://stackoverflow.com/questions/70664433
复制相似问题