2016-02-18 137 views
5

http://en.cppreference.com/w/cpp/chrono的實例中,秒數值在double中獲得。這是我想要的行爲。然而,這似乎依賴於隱含的假設,即時間點減法產生代表秒的值。我找不到任何解釋爲什麼一個持續時間在沒有實際指定時間單位的情況下產生浮點秒的原因。完全不使用auto,有人可以展示如何明確獲取浮點類型中的時間單位(例如秒),還是指向文檔或解釋爲什麼上述轉換表示秒?獲得計時秒數

有問題的轉換基本上是:

std::chrono::time_point<std::chrono::system_clock> start = std::chrono::system_clock::now(); 
std::chrono::time_point<std::chrono::system_clock> end = std::chrono::system_clock::now(); 
std::chrono::duration<double> elapsed_seconds = end-start; // why does this represent seconds as opposed to some other time unit? 
double secondsInDouble = elapsed_seconds.count(); 

請參閱以下職位轉換的例子。

How to get duration, as int milli's and float seconds from <chrono>?

C++ chrono - get duration as float or long long

getting chrono time in specific way

Chrono Timer Not Converting Seconds Properly

回答

5

根據該:http://en.cppreference.com/w/cpp/chrono/duration用於第二模板參數缺省比值是1:1含義秒。

其他值是相對於該值的比率。例如,對於std::chrono::milliseconds的比率爲1:1000http://en.cppreference.com/w/cpp/numeric/ratio/ratio

因此該語句:

std::chrono::duration<double> elapsed_seconds = end-start; 

相當於:

std::chrono::duration<double, std::ratio<1>> elapsed_seconds = end-start; 

其被定義爲從其中所有其它比率導出秒。

無論單元end - start在GET轉換爲std::ratio<1>定義。

如果你想以毫秒爲單位的時間,你可以這樣做:

std::chrono::duration<double, std::ratio<1, 1000>> elapsed_milliseconds = end-start; 

而且end - start應根據新的比例轉換。

+0

我在參考文獻的頂部看到了我錯過的部分:'tick週期是編譯時有理常量,表示從一個刻度到下一個刻度的秒數。「因此,默認比例爲1:1,持續時間總是代表一秒鐘。感謝您將這引起我的注意。 – taz

+2

'std :: ratio <1, 1000>'可以替換爲'std :: milli'。 –