2014-01-23 93 views
6

C++標準(github.com/cplusplus/draft)具有time_t轉換函數(std::chrono::system_clock::to_time_tstd::chrono::system_clock::from_time_t),列爲staticnoexcept而不是constexpr爲什麼std :: chrono :: system_clock :: to_time_t()不是constexpr?

因爲基本上所有的操作對time_pointdurationconstexpr(包括duration_casttime_point_cast),我想不出任何理由將它們排除在外。快速檢查我的本地機器上的libstdC++源代碼,確認這些函數實現爲簡單的持續時間/時間點轉換。

是否有任何理由認爲這兩個函數不應該是constexpr?這僅僅是「因爲沒有人提出他們應該是」的情況嗎?

回答

3

這僅僅是「因爲沒有人提出他們應該」的情況嗎?

是的,我認爲這是完全正確的。

我很好奇:一旦你得到constexpr time_t,你打算怎麼做?使用time_t的C函數都不是constexpr

+0

我有一個時間戳類,以前使用'time_t'作爲內部表示。它目前通過'time_t'提供'constexpr'構造函數。現在我想將內部表示更改爲'time_point',但沒有'constexpr from_time_t',我將被迫從'time_t'構造函數中刪除'constexpr',這可能會破壞下游用戶代碼。 – marack

+0

@marack:我明白了。是的,這令人沮喪。我會很想去承擔一個普通的但沒有說明的時代和代表性,並且只是推出自己的constexpr轉換。這很簡單,你已經注意到了:'system_clock :: time_point(seconds(time_t_value));'。您也可以按照以下說明提交庫缺陷報告:http://cplusplus.github.io/LWG/lwg-active.html#submit_issue。 –

相關問題