如何确定 chrono::steady_clock 的代表和周期类型?

How is chrono::steady_clock's rep and period types determined?

本文关键字:周期 类型 clock chrono 何确定 steady      更新时间:2023-10-16

chrono::steady_clock由4种成员类型组成:repperioddurationtimepoint

chrono::steady_clock::durationchrono::duration<rep,period>chrono::steady_clock::periodratio

如何确定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>

chrono::steady_clock包含4种成员类型:repperiod, duration, timepoint .

chrono::stead_clock::durationchrono::duration<rep,period>chrono::steady_clock::periodratio .

是的。

chrono::stead_clock::durationchrono::steady_clock::period决定?

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

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

2. period几乎是在空中。也就是说,VS, libstdc++和libc++都将steady_clock::period设置为nano

3. duration必须与repperiod有一个非常特定的关系:is_same<duration, chrono::duration<rep, period>>{}true_type。如果您首先指定duration,然后从中派生repperiod,或者反之亦然,则没有太大关系。但不变量必须成立。

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

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

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

duration总是基于repperiodstd::chrono::duration<rep, period>