2016-03-18 1 views
7

Для измерения времени выполнения функции, я могу использовать оба. Но в чем разница между использованием <chrono> и <ctime>? Должен ли я предпочесть один вместо другого?В чем разница между <chrono> и <ctime>?

+3

Секунды против наносекунды? Современная юзабилити против древней полуугодности? –

+4

Огромное изменение идеологии после 40-летнего использования. – user4581301

ответ

6

ctime - это заголовок в стиле C, он старый, не безопасный тип и не такой точный, как chrono. chrono - предпочтительный вариант в C++; это современный C++-заголовок, он безопасен по типу, так же точно, как позволяет наше оборудование, имеет расширенную функциональность и, что более важно, он следует за логикой C++ (а не с C), чтобы некоторые вещи были более естественными/выразительными с ним и так что мы можем ожидать, что он будет знать о многих современных языковых функциях (потоках, исключениях и т. д.) - мы не можем делать те же предположения для ctime.

Тем не менее, существует еще несколько прецедентов для ctime (или даже time.h), например. когда нам нужно поговорить с некоторыми API-интерфейсами API или когда мы полагаемся на старые кодовые базы или когда мы используем библиотеку, которая следует за другой логикой. C++ призван быть прагматичным и не быть «чистым» во всех отношениях; поэтому ctime и всевозможные устаревшие заголовки, синтаксисы и языковые функции все еще существуют, даже если программистам не рекомендуется использовать их.

5

ctime старая школа. Его единственное использование теперь - это решение для получения дат от временных точек (поскольку C++ не имеет адекватной стандартной библиотеки datetime). Для общих нужд времени используйте chrono. Если вам нужно включить system_clock::time_point в дату/время, используйте ctime.

+3

Просто интересно, почему 'ctime' - это дерьмовое решение? –

+5

Лучше, чем 'ctime' превратить turn' system_clock :: time_point' в структуру даты/времени поля: http://howardhinnant.github.io/date_v2.html :-) –

+4

@YeeLiu: 'ctime' is not «безопасный тип». Например, 'difftime' возвращает' double' вместо 'duration'. И 'tm.tm_sec' имеет тип' int' вместо типа 'seconds'. Это отсутствие безопасности типа означает, что компилятор не может проверить логические ошибки, которые (например) выполняют нелогичную алгебру в единицах времени. –

Смежные вопросы