如何确定chrono :: steady_clock的rep和period类型?

use*_*622 5 c++ duration clock c++-chrono

chrono::steady_clock由4种成员类型的:rep,period,duration,和timepoint.

chrono::steady_clock::duration是一个chrono::duration<rep,period>. chrono::steady_clock::period是一个ratio.

各种类型chrono::steady_clock::durationchrono::steady_clock::period决定如何?

例如,

chrono::steady_clock::duration可能是chrono::duration<int,period>时期ratio<1,1000>

要么

chrono::steady_clock::duration可能是chrono::duration<double,period>时期ratio<1,1000000>.

How*_*ant 5

chrono::steady_clock由4种成员类型的:rep, period,duration,和timepoint.

chrono::stead_clock::duration是一个chrono::duration<rep,period>. chrono::steady_clock::period是一个ratio.

是.

各种类型chrono::stead_clock::durationchrono::steady_clock::period决定如何?

它们在某种程度上是特定于实现的,但在这些类型中确实存在约束和不变量.

1. rep必须是一个非常好的算术类型.它必须具有默认构造函数,复制构造函数,复制赋值,并且它具有非令人惊讶的语义,并且不会抛出异常.事实上的标准是所有steady_clock::rep都是有符号的整数64位类型.

2. period几乎在空中.话虽如此,VS,libstdc ++和libc ++都已steady_clock::period设置为nano.

3. duration必须与rep和之间有非常具体的关系period: is_same<duration, chrono::duration<rep, period>>{}true_type.如果您duration首先指定并从中派生rep,那么无关紧要period,反之亦然.但必须保持不变量.

4. time_point应该是std::chrono::time_point一个持续时间为的实例duration.没有具体说明time_point时钟是什么.无论那个时钟是什么类型,它必须具有相同的时代steady_clock.这可以说是一个缺陷,应该有一个约束steady_clock::time_point::clocksteady_clock.事实上的标准是这种约束成立.


Dav*_*vid 3

标准未指定和repperiod每个标准库实现都可以选择自己的。如果他们使用的底层计时调用的精度为 100 纳秒,那么选择周期std::ratio<100, 1000000000>似乎是个好主意。

这些类型必须满足一些要求,但这很大程度上取决于实现。

duration总是基于rep并且period...std::chrono::duration<rep, period>