期间必须是C++ 17 chrono库中的比例专业化?

And*_*zos 2 c++ c++-chrono c++17

我显然太愚蠢了,不能使用C++ 17 <chrono>库.编译以下内容......

#include <chrono>
#include <iostream>

int main() {
    using clock = std::chrono::steady_clock;
    using duration = std::chrono::duration<double, std::chrono::seconds>;
    using timepoint = std::chrono::time_point<clock, duration>;
    timepoint t0 = clock::now();
    for (int i = 0; i < 1000; i++) {
        timepoint t = clock::now();
        duration d = t-t0;
        double seconds = d.count();
        std::cout << seconds << std::endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

我明白了......

/usr/include/c++/8/chrono:319:16: error: static assertion failed:
                                  period must be a specialization of ratio
      static_assert(__is_ratio<_Period>::value,
                    ^~~~~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Jas*_*n C 6

第二个类型参数std::chrono::duration需要是一个比率(每秒滴答数),而不是另一个持续时间(参见https://en.cppreference.com/w/cpp/chrono/duration).std::chrono::seconds是一个持续时间.你想要这个:

using duration = std::chrono::duration<double, std::ratio<1> >;
Run Code Online (Sandbox Code Playgroud)

仅供参考std::chrono::seconds,基本上是一个std::chrono::duration<some integer type, std::ratio<1> >; 你的持续时间类型有点像seconds但有浮点数而不是整数.

  • 谢谢。我终于发现它是 `std::chrono::duration&lt;double&gt;` 我相信它是你写的内容的缩写。 (2认同)