Die C++ Standard (github.com/cplusplus/draft) die time_t
Umwandlungsfunktionen (std::chrono::system_clock::to_time_t
und std::chrono::system_clock::from_time_t
) für so static
und noexcept
aufgeführt, aber nicht constexpr
.Warum ist std :: chrono :: system_clock :: to_time_t() nicht consxpr?
gegeben, die im Wesentlichen alle Operationen auf time_point
und duration
sind constexpr
(einschließlich duration_cast
und time_point_cast
), kann ich mir nicht aus irgendeinem Grund, sie auszuschließen. Eine kurze Überprüfung der libstdC++ - Quellen auf meinem lokalen Rechner bestätigt, dass diese Funktionen als einfache duration/time_point-Umwandlungen implementiert sind.
Gibt es einen Grund, warum diese beiden Funktionen nicht constexpr
sein sollten? Ist dies nur ein Fall von "weil niemand vorgeschlagen hat, dass sie sein sollten"?
Ich habe eine Timestamp-Klasse, die zuvor eine 'time_t' als interne Darstellung verwendet hat. Es bietet derzeit einen 'constexpr'-Konstruktor aus einer' time_t'. Jetzt möchte ich die interne Repräsentation in einen 'time_point' ändern, aber ohne 'constexpr from_time_t' werde ich gezwungen,' constexpr' aus dem 'time_t'-Konstruktor zu entfernen, was möglicherweise den nachgeschalteten Benutzercode unterbricht. – marack
@marack: Ich verstehe. Ja, das ist frustrierend. Ich wäre sehr versucht, einfach die gemeinsame, aber unbestimmte Epoche und Repräsentation anzunehmen und nur eine eigene constexpr-Umwandlung zu veranstalten. Es ist einfach genug, wie Sie bereits bemerkt haben: 'system_clock :: time_point (Sekunden (time_t_value));'. Sie können auch einen Fehlerbericht für eine Bibliothek ablegen, indem Sie den Anweisungen hier folgen: http://cplusplus.github.io/LWG/lwg-active.html#submit_issue. –