mit:
using clock = std::chrono::system_clock;
using time_point = std::chrono::time_point<clock>;
time_point
als implementiert, wenn es einen Wert vom Typ Dauer speichert das Zeitintervall von dem Beginn der Epoche der Uhr anzeigt. (Siehe std::chrono::time_point
)
Der duration
Mitglied Typ clock
(und time_point
) fähig ist, der für negatives Zeitdauern.
So kann duration
in Ihrer Implementierung mit einer Back-End-Ganzzahl mit Vorzeichen implementiert werden (es kann mit vorzeichenlosen Ganzzahlen implementiert werden, aber mit einem komplizierten Vergleich). so
In dieser speziellen Implementierung
time_point::min();
time_point t(clock::duration::min());
time_point t(clock::duration(std::numeric_limits<Rep>::lowest()));
und tp_now
größer als zero
, wenn man sie abziehen, erhalten Sie einen Integer-Überlauf kommen, weil das Ergebnis größer als std::numeric_limits<Rep>::max()
ist. In der Implementierung mit signierten Back-End, ist es undefiniertes Verhalten, in der Implementierung mit unsigned Back-End, weiß ich nicht darüber, aber ich denke, seine speziellen Vergleich wird seine false
machen.
In this example, tp_min
-9223372036854775808
Zecken aus seiner Epoche ist, ist, dass die gleiche Anzahl mit std::numeric_limits<duration::rep>::lowest()
TL; DR; Es ist Integer-Überlauf. Sie
(tp1 - tp2) > std::chrono::duration<whatever_rep>::zero
nicht Stattdessen benutzen, verwenden
tp1 > tp2
Coliru: http://coliru.stacked-crooked.com/a/4ee25ea413140aa8 Wie dem auch sei, Wandbox gedruckt true false – Danh
Ich denke, es ist Integer-Überlauf – Danh
'tp_now - tp_min' ist negativ auf Wandbox. Ich denke Danh hat Recht. –