我有2個類型爲time_t的變量 - varEnd和varStart。 現在,爲了看到他們 要麼之間的區別我可以做difftime和' - '有什麼區別?
varEnd - varStart;
或
difftime(varEnd, varStart);
和兩個返回的秒數。
請讓我知道,如果他們有任何區別?或者哪個是推薦的?
我有2個類型爲time_t的變量 - varEnd和varStart。 現在,爲了看到他們 要麼之間的區別我可以做difftime和' - '有什麼區別?
varEnd - varStart;
或
difftime(varEnd, varStart);
和兩個返回的秒數。
請讓我知道,如果他們有任何區別?或者哪個是推薦的?
該語言指定time_t
是一種能夠表示時間的算術類型。它並不要求它以任何特定的方式代表時間。
如果time_t
表示時間爲自某個時刻以來的秒數,則-
運算符將正確計算兩個time_t
值之間的差值(秒)。
如果不是這樣(例如,如果粒度是一毫秒,或者time_t
的位被劃分成代表年,月,日等的組),那麼運算符可以產生無意義的結果。
另一方面,difftime()
函數「知道」time_t
代表一個時間,並使用該信息計算以秒爲單位的差異。
在大多數的實現,簡單的減法和difftime()
碰巧做同樣的事情 - 但只有difftime()
是保證在所有實現正常工作。
另一個區別:difftime()
返回浮點類型double
的結果,而"-"
上time_t
值產生time_t
類型的結果。在大多數情況下,結果將隱式轉換爲您分配的類型,但如果time_t
碰巧是無符號整數類型,則從較早時間減去較晚時間將產生非常大的值而不是負值。我見過的每個系統都使用time_t
作爲32位或64位有符號整數類型,但允許使用無符號類型 - 還有一個原因,即簡單減法time_t
值不是必需的。
difftime()返回一個浮點數double,只是減去它們不會除非您先將它們轉換爲double。
來源:here
是的,但是在減去它們之前,即使將'time_t'操作數轉換爲'double'也不能保證與'difftime'做同樣的事情 - 這就是爲什麼'difftime'存在的原因。看到我的答案。 –
爲什麼被標記爲「C++」? –
@PaulR:''difftime()'存在於C和C++中。 –
那麼你也可以稱它爲Pascal或FORTRAN,但它並不是Pascal或FORTRAN問題。 ;) –