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() not constexpr?
Учитывая, что практически все операции на time_point
и duration
являются constexpr
(включая duration_cast
и time_point_cast
), я не могу думать о какой-либо причине, чтобы исключить их. Быстрый осмотр источников libstdC++ на моей локальной машине подтверждает, что эти функции реализованы как простые длительности/время_показа.
Есть ли причина, по которой эти две функции не должны быть constexpr
? Это просто случай «потому что никто не предложил, чтобы они были»?
У меня есть класс timestamp, который ранее использовал 'time_t' как внутреннее представление. В настоящее время он предлагает конструктор 'constexpr' из' time_t'. Теперь я хотел бы изменить внутреннее представление на 'time_point', но без' constexpr from_time_t' я буду вынужден удалить 'constexpr' из конструктора' time_t', который потенциально может сломать нисходящий пользовательский код. – marack
@marack: Я вижу. Да, это разочаровывает. У меня было бы очень искушение просто принять общую, но неуказанную эпоху и представление, и просто свернуть свою собственную конверсию constexpr. Это достаточно просто, как вы уже отметили: 'system_clock :: time_point (seconds (time_t_value));'. Вы также можете подать отчет о дефекте библиотеки, следуя инструкциям здесь: http://cplusplus.github.io/LWG/lwg-active.html#submit_issue. –