问题描述
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <ctime>
#include <chrono>
using namespace std;
using namespace std::chrono;
int main()
{
using my_timepoint = time_point<high_resolution_clock,nanoseconds>;
my_timepoint Now = system_clock::Now();
my_timepoint then = system_clock::Now() - seconds{1};
duration<double> my_dur = Now - then;
cout << my_dur.count();
}
这里 my_timepoint
用 nanoseconds
表示,但我仍然得到此代码的输出为 1
。为什么不是1e+09
?如何评价两个时间点的差异?
解决方法
持续时间模板采用一个比率参数,如下所述: https://en.cppreference.com/w/cpp/chrono/duration
发布的代码使用的是默认值(每 1 秒 1 个滴答声),所以很自然地,当您向它请求 count()
时,它只会返回 1,以表示已经过去的滴答声。>
你可以构造一个使用不同比率的持续时间对象,然后你会得到1e+09
:
duration<double,std::ratio<1,1000000000>> my_dur = now - then;