如何将标准::时间::d转换为双倍(秒)?

How to convert std::chrono::duration to double (seconds)?

本文关键字:转换 标准 时间      更新时间:2023-10-16

让我们有using duration = std::chrono::steady_clock::duration.我想优雅地将持续时间转换为以秒为单位的两倍。

我找到了相反的方法,但它并没有帮助我找到它。

或者表达,我想要一些最好的 std 函数double F(duration),它返回秒。

只需执行:

std::chrono::duration<double>(d).count()

或者,作为一个函数:

template <class Rep, class Period>
constexpr auto F(const std::chrono::duration<Rep,Period>& d)
{
return std::chrono::duration<double>(d).count();
}

如果需要std::chrono::duration构造函数无法满足的更复杂的转换,请使用std::chrono::duration_cast

std::chrono::duration转换为任何数字"计数"看似简单!

您可以将任意两个std::chrono::duration除以有效地 获取计数。

给定任何周期和任何整数表示的持续时间d

using std::chrono_literals;
// Want to know how many seconds?  Divide by one second!
std::int64_t int_seconds = d / 1s;
double       fp_seconds  = d / 1.0s;

如图所示,两个持续时间的周期并不重要。 生成的类型将是两个持续时间的通用类型。

这对我来说是最直接的方法:

auto start = std::chrono::steady_clock::now();
/*code*/
auto end = std::chrono::steady_clock::now();
std::chrono::duration<double> diff = end - start;
std::cout << "Duration [seconds]: " << diff.count() << std::endl;

但是我不知道精度...虽然这种方法非常精确。