簡體   English   中英

C++ chrono::system_clock::now() vs time(0)

[英]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>中存在完整的日歷和時區支持。


1例如: Howard Hinnant 的日期/時間庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM