2016-03-18 9 views
7

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>?

+3

Sekunden vs Nanosekunden? Moderne Usability gegen alte Semi-Usability? –

+4

Weite Änderung der Ideologie nach 40-jährigen Jahren der Nutzung. – user4581301

Antwort

6

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.

5

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.

+3

Ich frage mich nur, warum 'ctime' eine Mistlösung ist? –

+5

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 :-) –

+4

@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. –

Verwandte Themen