[英]C++ chrono::system_clock::now() vs time(0)
chrono::system_clock::now()
和time(0)
函數及其返回值之間是否存在顯着差異?
我什么時候應該使用chrono::system_clock::now()
而不是time(0)
,反之亦然?
system_clock::now()
vs time(0)
system_clock::now()
和time(0)
測量相同的東西: Unix Time 。 這是time(0)
未指定的,但在實踐中是正確的。 C++11/14/17 中的system_clock::now()
也未指定它,但在實踐中是正確的。 在 C++20 中,它由system_clock::now()
指定。
system_clock::now()
和time(0)
報告的精度(秒、微秒等)未指定。 對於system_clock
,您的應用程序可以在編譯時或運行時發現精度。 對於time(0)
,精度必須由人工從文檔中讀取。 time(0)
的典型精度是秒。 對於 Apple 操作系統上的 LLVM, sytem_clock::now()
的精度為微秒。 在 gcc/Linux 上,納秒級。 而在 Windows 1 / 10微秒。 由於<chrono>
的設計,很容易編寫不隨基礎精度而改變的可移植代碼。
time(0)
的范圍未指定,在 32 位機器上通常以 1970 年為中心大約 +/-68 年(2038 年即將到來……)。 在 64 位機器上, time(0)
的范圍是 +/-2920 億年。 system_clock::now()
的范圍可在編譯時或運行時發現,並且永遠不會小於 +/-292 年(以 1970 年為中心)。 精度越高,范圍越小。
time(0)
的返回類型通常是有符號整數類型,它存在與應用程序中所有其他整數類型混淆的風險(沒有類型安全性)。 system_clock::now()
的返回類型是具有時間點語義的類類型。 它不能與整數或浮點類型混淆。 它是與持續時間不同的類型。 在編譯時以不合邏輯的方式濫用這個時間點(強類型安全)。
time(0)
與<time.h>
中的日期/時間庫的其余部分互操作。
sytem_clock::now()
與<chrono>
中的日期/時間庫的其余部分互操作。 這包括與time(0)
返回的time_t
之間的轉換。 在 C++11/14/17 中,日歷和時區功能不存在,但可以通過免費的開源庫添加。 1在 C++20 中, <chrono>
中存在完整的日歷和時區支持。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.