2016-03-18 27 views
7

Do pomiaru czasu wykonania funkcji można użyć obu. Ale jaka jest różnica między używaniem <chrono> i <ctime>? Czy powinienem preferować jeden zamiast drugiego?Jaka jest różnica między <chrono> i <ctime>?

+3

Sekundy vs nanosekundy? Nowoczesna użyteczność a starożytna pół-użyteczność? –

+4

Ogromna zmiana w ideologii po 40-kilku latach użytkowania. – user4581301

Odpowiedz

6

ctime jest nagłówkiem w stylu C, jest stary, nie jest bezpieczny i nie jest tak dokładny jak chrono. chrono jest preferowaną opcją w C++; jest to współczesny nagłówek C++, bezpieczny dla użytkownika, tak dokładny, jak pozwala na to nasz sprzęt, ma rozszerzoną funkcjonalność i, co ważniejsze, działa zgodnie z logiką C++ (raczej niż C), aby pewne rzeczy były bardziej naturalne/ekspresyjne z tym i tak możemy oczekiwać, że będzie on świadomy wielu współczesnych cech języka (wątków, wyjątków, itp.) - nie możemy złożyć tych samych założeń dla ctime.

Mimo to nadal istnieje kilka przypadków użycia dla ctime (lub nawet time.h), np. kiedy musimy porozmawiać z C API lub gdy polegamy na starych bazach kodu lub kiedy używamy biblioteki, która ma inną logikę. C++ ma być pragmatyczny i nie być "czysty" pod żadnym względem; właśnie dlatego ctime i wszelkiego rodzaju przestarzałe nagłówki, składnie i funkcje językowe wciąż istnieją, nawet jeśli programistów zniechęca się do ich używania.

5

ctime to stara szkoła. Jego jedynym zastosowaniem jest teraz rozwiązanie problemu z datami (ponieważ C++ nie ma odpowiedniej standardowej biblioteki datetime). Aby zaspokoić ogólne wymagania czasowe, użyj chrono. Jeśli chcesz zmienić datę system_clock::time_point, użyj ctime.

+3

Zastanawiasz się, dlaczego 'ctime' jest rozwiązaniem bzdur? –

+5

Lepszy sposób niż 'ctime', aby włączyć' system_clock :: time_point' w strukturze daty/czasu pola: http://howardhinnant.github.io/date_v2.html :-) –

+4

@YeeLiu: 'ctime' nie jest "wpisz bezpieczny". Na przykład 'difftime' zwraca' double' zamiast 'duration'. Natomiast 'tm.tm_sec' ma typ' int' zamiast typu 'seconds'. Ten brak bezpieczeństwa typu oznacza, że ​​kompilator nie może sprawdzić błędów logicznych, które (na przykład) wykonują nielogiczną algebrę na jednostkach czasu. –