#include <iostream>
#include <chrono>
#include <typeinfo>
#include <time.h>
using namespace std;
using namespace std::chrono;
int main()
{
cout << sizeof(time_point<nanoseconds>) << endl; // 8
cout << sizeof(time_point<nanoseconds>::duration) << endl; // 8
cout << sizeof(time_point<nanoseconds>::duration::rep) << endl; // 8
cout << typeid(time_point<nanoseconds>::duration::rep).name() << endl; // l
cout << sizeof(struct timespec) << endl; // 16
cout << sizeof(struct timeval) << endl; // 16
return 0;
}
在64位Windows(MSVC2017)上,情况非常相似:存储类型也是一个64位整数。当处理稳定(又名单调)时钟时,这不是问题,但存储限制使得不同的API实现不适合存储更大的日期和更广泛的时间跨度,从而为类似Y2K的错误创造了基础。这个问题被认可了吗?是否有改进实现或API改进的计划?
time_point<days>
和duration<int32_t, nano>
这样一起使用的情况?例如,确保在duration中不存在大于等于1秒的时间? - ceztkotime_point<days> + duration<int32_t,nano>
将给你一个time_point<int32_t,nano>
(在2秒钟内会溢出)。 没有内置的溢出保护。 但是,如果你使用“safeint”库获取表示以获得溢出保护。 - Howard Hinnanttime_point<seconds>
和duration<int32_t,nano>
:在这种情况下,我可能会将duration<int32_t,nano>
转换为秒(向下取整),并加到time_point<seconds>
中,并将持续时间重写为模一秒。只是想知道使用API执行此操作的最流畅方式是什么。 - ceztko