如何将 std::chrono::duration 转换为双倍(秒)?

Pře*_*tný 10 c++ c++11 c++-chrono

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

我找到了相反的方法(将秒转换为双精度为 std::chrono::duration?),但它没有帮助我找到它。

或者表示,我最想要一些 std function double F(duration),它返回秒。

谢谢你。

Aco*_*orn 17

简单地做:

std::chrono::duration<double>(d).count()
Run Code Online (Sandbox Code Playgroud)

或者,作为一个函数:

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

如果您需要std::chrono::duration构造函数无法完成的更复杂的强制转换,请使用std::chrono::duration_cast.


Dre*_*ann 9

将 a 转换std::chrono::duration为任何数字“计数”非常简单!

您可以将任意两个s除以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;
Run Code Online (Sandbox Code Playgroud)

如图所示,两个持续时间的周期是多少并不重要。结果类型将是两个持续时间的公共类型。


Tra*_*tal 5

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

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;
Run Code Online (Sandbox Code Playgroud)

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

  • 这怎么知道是秒呢? (2认同)
  • “代表一个周期的长度,以秒为单位。” - https://www.cplusplus.com/reference/chrono/steady_clock/ 。我相信默认的“period”是“std::chrono::steady_clock”中的秒,这就是“count()”返回秒的原因。“对象的表示值作为周期计数。” - https://www.cplusplus.com/reference/chrono/duration/count/ (2认同)