std::chrono::duration
定義於標頭檔案 <chrono> |
||
template< class Rep, |
(C++11 起) | |
類模板 std::chrono::duration
表示一個時間間隔。
它由型別為 Rep
的刻度計數和一個刻度週期組成,其中刻度週期是一個編譯時有理分數,表示從一個刻度到下一個刻度的時間(以秒為單位)。
儲存在 duration
中的唯一資料是型別為 Rep
的刻度計數。如果 Rep
是浮點型別,則 duration
可以表示刻度的分數。Period
作為 duration 型別的一部分包含在內,僅在不同 duration 之間進行轉換時使用。
目錄 |
[編輯] 成員型別
成員型別 | 定義 |
rep
|
Rep ,一個算術型別,或一個模擬算術型別的類,表示刻度數 |
period
|
Period (C++17 前)typename Period::type(C++17 起),一個 std::ratio 表示刻度週期(即每刻度的秒分數) |
[編輯] 成員函式
構造新的 duration (public 成員函式) | |
賦值內容 (public 成員函式) | |
返回刻度計數 (public 成員函式) | |
[靜態] |
返回特殊的 duration 值 zero (public static 成員函式) |
[靜態] |
返回特殊的 duration 值 min (public static 成員函式) |
[靜態] |
返回特殊的 duration 值 max (public static 成員函式) |
實現一元 + 和一元 - (public 成員函式) | |
增加或減少刻度計數 (public 成員函式) | |
實現兩個 duration 之間的複合賦值 (public 成員函式) |
[編輯] 非成員函式
實現以持續時間為引數的算術運算 (函式模板) | |
(C++11)(C++11)(在 C++20 中移除)(C++11)(C++11)(C++11)(C++11)(C++20) |
比較兩個 durations (函式模板) |
(C++11) |
將一個 duration 轉換為另一個,具有不同的時鐘間隔 (函式模板) |
(C++17) |
將一個 duration 轉換為另一個,向下取整 (函式模板) |
(C++17) |
將一個 duration 轉換為另一個,向上取整 (函式模板) |
(C++17) |
將一個 duration 轉換為另一個,四捨五入到最接近的值,平局時取偶數 (函式模板) |
(C++17) |
獲取 duration 的絕對值 (函式模板) |
(C++20) |
對 duration 執行流輸出(函式模板) |
(C++20) |
根據提供的格式從流中解析 duration (函式模板) |
[編輯] 輔助型別
下表中的型別 /* intXX */ 表示至少 XX 位的有符號整數型別。
型別 | 定義 |
std::chrono::nanoseconds
|
std::chrono::duration</* int64 */, std::nano> |
std::chrono::microseconds
|
std::chrono::duration</* int55 */, std::micro> |
std::chrono::milliseconds
|
std::chrono::duration</* int45 */, std::milli> |
std::chrono::seconds
|
std::chrono::duration</* int35 */> |
std::chrono::minutes
|
std::chrono::duration</* int29 */, std::ratio<60>> |
std::chrono::hours
|
std::chrono::duration</* int23 */, std::ratio<3600>> |
std::chrono::days (C++20 起) |
std::chrono::duration</* int25 */, std::ratio<86400>> |
std::chrono::weeks (C++20 起) |
std::chrono::duration</* int22 */, std::ratio<604800>> |
std::chrono::months (C++20 起) |
std::chrono::duration</* int20 */, std::ratio<2629746>> |
std::chrono::years (C++20 起) |
std::chrono::duration</* int17 */, std::ratio<31556952>> |
注意:每個預定義的 duration 型別,直到 hours
,至少覆蓋 ±292 年的範圍。
預定義的 duration 型別 |
(C++20 起) |
[編輯] 輔助類
特化 std::common_type 特性 (類模板特化) | |
(C++11) |
指示 duration 可以轉換為具有不同刻度週期的 duration (類模板) |
(C++11) |
構造給定型別刻度計數的零、最小值和最大值 (類模板) |
duration 的格式化支援(類模板特化) | |
支援 std::chrono::duration 的雜湊 (類模板特化) |
[編輯] 輔助特化
template< class Rep, class Period > constexpr bool enable_nonlocking_formatter_optimization<chrono::duration<Rep, Period>> |
(C++23 起) | |
此 std::enable_nonlocking_formatter_optimization 的特化允許在模板引數 Rep
啟用時,為列印 chrono::duration
物件高效實現 std::print 和 std::println。
[編輯] 字面量
在內聯名稱空間
std::literals::chrono_literals 中定義 | |
(C++14) |
表示小時的 std::chrono::duration 字面量 (函式) |
(C++14) |
表示分鐘的 std::chrono::duration 字面量 (函式) |
(C++14) |
表示秒的 std::chrono::duration 字面量 (函式) |
(C++14) |
表示毫秒的 std::chrono::duration 字面量 (函式) |
(C++14) |
表示微秒的 std::chrono::duration 字面量 (函式) |
(C++14) |
表示納秒的 std::chrono::duration 字面量 (函式) |
(C++20 起) |
[編輯] 註釋
由 duration 物件 d 持有的實際時間間隔(以秒為單位)大致等於 d.count() * D::period::num / D::period::den,其中 D
是型別 chrono::duration<>
,而 d 是此類型別的一個物件。
特性測試宏 | 值 | 標準 | 特性 |
---|---|---|---|
__cpp_lib_chrono_udls |
201304L |
(C++14) | 時間型別的使用者定義字面量 |
[編輯] 示例
此示例展示瞭如何定義幾個自定義 duration 型別並在型別之間進行轉換
#include <chrono> #include <iostream> using namespace std::chrono_literals; template<typename T1, typename T2> using mul = std::ratio_multiply<T1, T2>; int main() { using microfortnights = std::chrono::duration<float, mul<mul<std::ratio<2>, std::chrono::weeks::period>, std::micro>>; using nanocenturies = std::chrono::duration<float, mul<mul<std::hecto, std::chrono::years::period>, std::nano>>; using fps_24 = std::chrono::duration<double, std::ratio<1, 24>>; std::cout << "1 second is:\n"; // integer scale conversion with no precision loss: no cast std::cout << std::chrono::milliseconds(1s).count() << " milliseconds\n" << std::chrono::microseconds(1s).count() << " microseconds\n" << std::chrono::nanoseconds(1s).count() << " nanoseconds\n"; // integer scale conversion with precision loss: requires a cast std::cout << std::chrono::duration_cast<std::chrono::minutes>(1s).count() << " minutes\n"; // alternative to duration_cast: std::cout << 1s / 1min << " minutes\n"; // floating-point scale conversion: no cast std::cout << microfortnights(1s).count() << " microfortnights\n" << nanocenturies(1s).count() << " nanocenturies\n" << fps_24(1s).count() << " frames at 24fps\n"; }
輸出
1 second is: 1000 milliseconds 1000000 microseconds 1000000000 nanoseconds 0 minutes 0 minutes 0.82672 microfortnights 0.316887 nanocenturies 24 frames at 24fps