在浮动中获取计时秒数

Get chrono seconds in float

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

Chrono Timer Not Converting Seconds Properly

据此: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应该按照新的比例换算。