<chrono> 和 <ctime> 有什么区别?

What is the difference between <chrono> and <ctime>?

为了测量函数的执行时间,我可以同时使用两者。但是使用 <chrono><ctime> 有什么区别呢?我应该更喜欢一个而不是另一个吗?

ctime 是老派。它现在唯一的用途是作为从时间点获取日期的废话解决方案(因为 c++ 没有足够的标准日期时间库)。对于一般时间需要,使用chrono。如果您需要将 system_clock::time_point 转换为 date/time,请使用 ctime.

ctime 是一个 C-style header,它很旧,类型不安全且不如 chrono 准确。 chrono 是 C++ 中的首选选项;它是当代的 C++ header,它是类型安全的,在我们的硬件允许的情况下尽可能准确,它具有扩展的功能,更重要的是,它遵循 C++(而不是 C)逻辑,因此某些东西会更 natural/expressive,这样我们就可以期望它知道许多当代语言特性(线程、异常等)——我们不能对 ctime 做出相同的假设。

也就是说,ctime(甚至time.h)还有几个use-cases,例如当我们需要与某些 C API 交谈或当我们依赖旧的 code-bases 或当我们使用某些遵循不同类型逻辑的库时。 C++ 被设计成务实的,而不是 "pure" 在任何方面;这就是为什么 ctime 和各种过时的 header 语法和语言功能仍然存在,即使不鼓励程序员使用它们。