Zum Messen der Ausführungszeit einer Funktion kann ich beide verwenden. Aber was ist der Unterschied zwischen der Verwendung von <chrono>
und <ctime>
? Sollte ich lieber einen anderen bevorzugen?Was ist der Unterschied zwischen <chrono> und <ctime>?
Antwort
ctime
ist ein C-Stil-Header, es ist alt, nicht typsicher und nicht so genau wie chrono
. chrono
ist die bevorzugte Option in C++; es ist ein zeitgemäßer C++ - Header, es ist typsicher, so genau wie unsere Hardware es zulässt, es hat erweiterte Funktionalität und, was noch wichtiger ist, es folgt C++ (und nicht C) Logik, so dass bestimmte Dinge natürlicher und expressiver damit sind dass wir erwarten können, dass es viele moderne Sprachfunktionen (Threads, Exceptions usw.) kennt - wir können nicht die gleichen Annahmen für ctime
treffen. Das heißt, es gibt immer noch mehrere Anwendungsfälle für ctime
(oder sogar time.h
), z. wenn wir mit einer C-API sprechen müssen oder wenn wir uns auf alte Codebasen verlassen oder wenn wir eine Bibliothek verwenden, die einer anderen Art von Logik folgt. C++ soll pragmatisch sein und in keiner Hinsicht "rein" sein; Dies ist, warum ctime
und alle Arten von antiquierten Überschriften, Syntaxen und Sprachfunktionen immer noch da sind, auch wenn Programmierer davon abgeraten werden, sie zu verwenden.
ctime
ist alte Schule. Seine einzige Verwendung ist jetzt eine Mistlösung, um Daten von Zeitpunkten zu erhalten (da C++ keine adäquate Standard-Datetime-Bibliothek hat). Für allgemeine Zeitanforderungen verwenden Sie chrono
. Wenn Sie eine system_clock::time_point
in ein Datum/eine Uhrzeit umwandeln müssen, verwenden Sie ctime
.
Ich frage mich nur, warum 'ctime' eine Mistlösung ist? –
Ein besserer Weg als 'ctime' ist die Umwandlung von' system_clock :: time_point' in eine Feld-Datum/Zeit-Struktur: http://howardhinnant.github.io/date_v2.html :-) –
@YeeLiu: 'ctime' ist nicht "Typ sicher". Zum Beispiel gibt 'difftime' ein' double' anstatt einer 'duration' zurück. Und 'tm.tm_sec' hat den Typ' int' anstelle von 'seconds'. Dieser Mangel an Typsicherheit bedeutet, dass der Compiler Logikfehler nicht überprüfen kann, die (zum Beispiel) unlogische Algebra auf Zeiteinheiten ausführen. –
Sekunden vs Nanosekunden? Moderne Usability gegen alte Semi-Usability? –
Weite Änderung der Ideologie nach 40-jährigen Jahren der Nutzung. – user4581301