2015-10-19 37 views
4

chrono::steady_clock由4種成員類型組成:rep,period,durationtimepoint如何確定chrono :: steady_clock的代表和週期類型?

chrono::steady_clock::durationchrono::duration<rep,period>chrono::steady_clock::periodratio

如何確定chrono::steady_clock::durationchrono::steady_clock::period的類型?

例如,

chrono::steady_clock::duration可以chrono::duration<int,period>其中週期是ratio<1,1000>

chrono::steady_clock::duration可以chrono::duration<double,period>其中週期是ratio<1,1000000>

回答

3

該標準未指定repperiod。每個標準庫實現可以選擇自己的。如果他們使用的底層定時調用具有100ns的精度,則選擇一段std::ratio<100, 1000000000>似乎是一個好主意。

有幾個requirements這些類型必須滿足,但它的實施相當。

duration始終只是基於repperiod ... std::chrono::duration<rep, period>

+0

所以,如果我使用Visual Studio和我使用的#include'',是否意味着'chrono'是由微軟執行? – user3731622

+1

性病::時辰::需要的時鐘基於符號整型有time_points /持續時間,其射程至少爲+/-292年的。這個要求不是放在程序員定義的時鐘上。 –

+1

@ user3731622是的 – David

2

chrono::steady_clock由4個成員類型:repperioddurationtimepoint

chrono::stead_clock::durationchrono::duration<rep,period>chrono::steady_clock::periodratio

是的。

如何類型的chrono::stead_clock::durationchrono::steady_clock::period確定的?

它們在某種程度上是特定的,但在這些類型中確實存在約束和不變量。

1.rep必須是一個很好的類算術類型。它必須有一個默認的構造函數,複製構造函數,複製賦值,並且它具有非意外的語義,並且不會拋出異常。事實上的標準是所有steady_clock::rep都是帶符號的整數64位類型。

2.period在空中非常漂亮。也就是說,VS,libstdC++和libC++全都有steady_clock::period設爲nano

3.duration必須有一個非常特殊的關係,repperiodis_same<duration, chrono::duration<rep, period>>{}true_type。如果指定duration第一和派生從repperiod,或反之亦然它並沒有多大關係。但不變式必須成立。

4.time_point應的std::chrono::time_pointduration的持續時間的實例化。它是不確定的time_point的時鐘是什麼。但是,這種時鐘是什麼類型的,它必須具有相同的劃時代的steady_clock。這可以說是一個缺陷,應該有約束steady_clock::time_point::clocksteady_clock。事實上的標準是這個約束條件成立。

相關問題