【发布时间】:2016-07-05 20:29:15
【问题描述】:
为了测量函数的执行时间,我可以同时使用两者。但是使用<chrono> 和<ctime> 有什么区别?我应该更喜欢一个而不是另一个?
【问题讨论】:
-
秒与纳秒?现代可用性与古代半可用性?
-
经过 40 多年的使用,意识形态发生了巨大变化。
为了测量函数的执行时间,我可以同时使用两者。但是使用<chrono> 和<ctime> 有什么区别?我应该更喜欢一个而不是另一个?
【问题讨论】:
ctime 是 C 风格的标头,它很旧,不是类型安全的,不如chrono 准确。 chrono 是 C++ 中的首选选项;它是一个当代 C++ 头文件,它是类型安全的,与我们的硬件允许的一样准确,它具有扩展功能,而且更重要的是,它遵循 C++(而不是 C)逻辑,因此某些事情会更自然/更有表现力等等我们可能期望它知道许多当代语言特性(线程、异常等)——我们不能对ctime 做出相同的假设。
也就是说,ctime(甚至time.h)仍有几个用例,例如当我们需要与一些 C API 交谈时,或者当我们依赖旧代码库时,或者当我们使用一些遵循不同类型逻辑的库时。 C++ 被设计为务实而不是在任何方面都“纯粹”;这就是为什么ctime 和各种过时的标头、语法和语言特性仍然存在,即使不鼓励程序员使用它们。
【讨论】:
ctime 是老派。它现在唯一的用途是作为从时间点获取日期的废话解决方案(因为 c++ 没有足够的标准日期时间库)。对于一般时间需求,请使用chrono。如果您需要将system_clock::time_point 转换为日期/时间,请使用ctime。
【讨论】:
ctime 更好的方法将system_clock::time_point 转换为字段日期/时间结构:howardhinnant.github.io/date_v2.html :-)
ctime 不是“类型安全的”。例如 difftime 返回 double 而不是 duration。而tm.tm_sec 的类型为int 而不是seconds 类型。这种缺乏类型安全性意味着编译器无法检查(例如)在时间单位上执行不合逻辑代数的逻辑错误。
localtime 不可重入。此功能对于从时间点开始的任何压延转换都是必不可少的