使用<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;
不被允许。在这个表达式中,rvalue是一个std::chrono::hours
变量,代表时间间隔,而std::chrono::time_point<>::operator+=
接受的是一个duration
。这里的理念是什么?按照单位量分不同的duration类型,必须与time_point
的粒度兼容吗?为什么?另一方面,我理解为什么
d += 2d;
会出现错误,因为在这种情况下,std::literals::chrono_literals::operator""d
是一个std::chrono::day
,它不是一个duration(尽管这对于构成日期文字很方便,但我觉得有点不一致)。我想知道是否有更方便的方法来表示等价于std::chrono::days{2}
的duration文字。
sys_days
的分辨率是天而不是小时,所以超过这个范围的一切都会丢失。如果您想要小时级别的精度,则使用小时,或者更好的方法是直接使用 std::chrono::time_point。 - user1187719548h
是等同于两天的持续时间,因为我无法用2d
表达它。我选择了一天的粒度来看看它是如何工作的,但似乎我需要更好地研究这个库背后的原理。 - MatGdays{2}
的方法——没有人能阻止你创建自己的operator""_days
。 - Ranoiaetep