6
C++標準(github.com/cplusplus/draft)具有time_t
轉換函數(std::chrono::system_clock::to_time_t
和std::chrono::system_clock::from_time_t
),列爲static
和noexcept
而不是constexpr
。爲什麼std :: chrono :: system_clock :: to_time_t()不是constexpr?
因爲基本上所有的操作對time_point
和duration
是constexpr
(包括duration_cast
和time_point_cast
),我想不出任何理由將它們排除在外。快速檢查我的本地機器上的libstdC++源代碼,確認這些函數實現爲簡單的持續時間/時間點轉換。
是否有任何理由認爲這兩個函數不應該是constexpr
?這僅僅是「因爲沒有人提出他們應該是」的情況嗎?
我有一個時間戳類,以前使用'time_t'作爲內部表示。它目前通過'time_t'提供'constexpr'構造函數。現在我想將內部表示更改爲'time_point',但沒有'constexpr from_time_t',我將被迫從'time_t'構造函數中刪除'constexpr',這可能會破壞下游用戶代碼。 – marack
@marack:我明白了。是的,這令人沮喪。我會很想去承擔一個普通的但沒有說明的時代和代表性,並且只是推出自己的constexpr轉換。這很簡單,你已經注意到了:'system_clock :: time_point(seconds(time_t_value));'。您也可以按照以下說明提交庫缺陷報告:http://cplusplus.github.io/LWG/lwg-active.html#submit_issue。 –