在http://en.cppreference.com/w/cpp/chrono的示例中,在double
中获取秒值。这是我想要的行为。然而,这似乎依赖于隐含的假设,即时间点减法产生表示秒的值。我找不到任何解释为什么持续时间在没有实际指定时间单位时产生浮点秒的原因。根本不使用auto
,有人可以展示如何在浮点类型中显式获取时间单位,例如秒,或者指向文档或解释为什么上述转换代表秒数?
有问题的转换基本上是:
std::chrono::time_point<std::chrono::system_clock> start = std::chrono::system_clock::now();
std::chrono::time_point<std::chrono::system_clock> end = std::chrono::system_clock::now();
std::chrono::duration<double> elapsed_seconds = end-start; // why does this represent seconds as opposed to some other time unit?
double secondsInDouble = elapsed_seconds.count();
有关转换的示例,请参阅以下帖子。
How to get duration, as int milli's and float seconds from <chrono>?
C++ chrono - get duration as float or long long
答案 0 :(得分:5)
根据:http://en.cppreference.com/w/cpp/chrono/duration,第二个模板参数的默认比率是1:1
,意味着秒。
其他值是相对于该比率的比率。例如,std::chrono::milliseconds
的比率为1:1000
http://en.cppreference.com/w/cpp/numeric/ratio/ratio
所以这句话:
std::chrono::duration<double> elapsed_seconds = end-start;
相当于:
std::chrono::duration<double, std::ratio<1>> elapsed_seconds = end-start;
定义为从中导出所有其他比率的秒数。
在秒中转换为end - start
时定义的任何单位std::ratio<1>
。
如果您想要以毫秒为单位的时间:
std::chrono::duration<double, std::ratio<1, 1000>> elapsed_milliseconds = end-start;
end - start
应根据新比例进行转换。