【问题标题】:What is the difference between <chrono> and <ctime>?<chrono> 和 <ctime> 有什么区别?
【发布时间】:2016-07-05 20:29:15
【问题描述】:

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

【问题讨论】:

  • 秒与纳秒?现代可用性与古代半可用性?
  • 经过 40 多年的使用,意识形态发生了巨大变化。

标签: c++ c++11 chrono ctime


【解决方案1】:

ctime 是 C 风格的标头,它很旧,不是类型安全的,不如chrono 准确。 chrono 是 C++ 中的首选选项;它是一个当代 C++ 头文件,它是类型安全的,与我们的硬件允许的一样准确,它具有扩展功能,而且更重要的是,它遵循 C++(而不是 C)逻辑,因此某些事情会更自然/更有表现力等等我们可能期望它知道许多当代语言特性(线程、异常等)——我们不能对ctime 做出相同的假设。

也就是说,ctime(甚至time.h)仍有几个用例,例如当我们需要与一些 C API 交谈时,或者当我们依赖旧代码库时,或者当我们使用一些遵循不同类型逻辑的库时。 C++ 被设计为务实而不是在任何方面都“纯粹”;这就是为什么ctime 和各种过时的标头、语法和语言特性仍然存在,即使不鼓励程序员使用它们。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • ctime 更好的方法将system_clock::time_point 转换为字段日期/时间结构:howardhinnant.github.io/date_v2.html :-)
    • @YeeLiu:ctime 不是“类型安全的”。例如 difftime 返回 double 而不是 duration。而tm.tm_sec 的类型为int 而不是seconds 类型。这种缺乏类型安全性意味着编译器无法检查(例如)在时间单位上执行不合逻辑代数的逻辑错误。
    • @YeeLiu 固定的时期也可能很麻烦。另一个是对线程的完全盲目。请允许我将完全失明调整为极度近视。
    • 非常感谢您的解释。你能解释一下对线程的盲目性吗?
    • @YeeLiu 关键函数localtime 不可重入。此功能对于从时间点开始的任何压延转换都是必不可少的
    猜你喜欢
    • 2020-09-26
    • 2010-10-02
    • 2011-12-12
    • 2010-09-16
    • 2012-03-14
    • 2012-02-06
    • 2011-02-25
    • 2011-11-22
    • 2015-03-26
    相关资源
    最近更新 更多