我显然太愚蠢了,不能使用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;
}
}
我明白了......
/usr/include/c++/8/chrono:319:16: error: static assertion failed:
period must be a specialization of ratio
static_assert(__is_ratio<_Period>::value,
^~~~~~~~~~~~~~~~~~~
有任何想法吗?
std::chrono::duration
的第二个类型参数需要是一个比率(每秒的滴答数),而不是另一个持续时间(参见https://en.cppreference.com/w/cpp/chrono/duration)。 std::chrono::seconds
是一个持续时间。你想要这个:
using duration = std::chrono::duration<double, std::ratio<1> >;
仅供参考,std::chrono::seconds
基本上是std::chrono::duration<some integer type, std::ratio<1> >
;你的持续时间类型有点像seconds
但有浮点数而不是整数。