代码之家  ›  专栏  ›  技术社区  ›  Andrew Tomazos

句点必须是C++17计时库中比率的特化?

  •  2
  • Andrew Tomazos  · 技术社区  · 6 年前

    我显然太笨了,不能使用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,
                        ^~~~~~~~~~~~~~~~~~~
    

    有什么想法吗?

    1 回复  |  直到 6 年前
        1
  •  8
  •   Jason 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> >;
    

    供参考 标准时间:秒 std::chrono::duration<some integer type, std::ratio<1> > ; 你的持续时间类型有点像 seconds 但是使用浮点数而不是整数。