16

の次のコードに気づきましたが<chrono.h>、意味がありません。

struct system_clock
{
    static const bool is_monotonic = false; // retained
    static const bool is_steady = false;
};

class steady_clock
    : public system_clock
    {   // wraps monotonic clock
public:
    static const bool is_monotonic = true;  // retained
    static const bool is_steady = true;
    };

typedef steady_clock monotonic_clock;   // retained
typedef system_clock high_resolution_clock;

steady_clock安定していないものから単純に派生した場合、どのように安定することができますsystem_clockか?

4

3 に答える 3

11

あなたが示したコードを無視すると(ジェリーの答えはすでに私よりもうまく対処しています)、この問題に関して現在MS Connectで開かれている複数のバグレポートから明らかなように、おそらくVC++2012std::steady_clockは安定していません。

于 2012-07-14T23:35:56.733 に答える
10

Microsoft の実装のバグを今のところ無視して、不安定なクロックから安定したクロックを派生させる (または非単調なクロックから単調なクロックを派生させる) ことは、一般的に完全に理にかなっています。

これは、典型的な "is-a" 用語が邪魔になる場所の 1 つであり、代わりに置換の観点から真剣に考える必要があります。特に、「安定した時計は不安定な時計ではないので、導出が間違っている」という状況ではありません。むしろ、「安定したクロックは、どのような状況下でも不安定なクロックに置き換えることができるので、派生は問題ありません」(および についても同様is_monotonic) という状況です。

極端な例を考えてみましょう。原子時計がコンピュータに直接接続されている場合です。それは単調で、期待できるほど安定しています。その出力が十分に高い周波数 (/解像度) であると仮定すると、基本的にシステムで利用可能な他のすべてのクロックの代わりに使用できます。

于 2012-07-15T00:01:23.603 に答える