为什么 C++20 中的 time_of_day 和 hh_mm_ss 是两种不同的类型?

Pat*_*ick 5 c++ c++-chrono c++20

C++20 标准定义了两种存储白天时间的类型:chrono::hh_mm_sschrono::time_of_day. 两者似乎都存储自午夜以来的持续时间,但由于 DST 效应,调用者应该只使用小时、分钟、秒和亚秒元素。 www.cppreference.com对这两种类型给出了完全相同的描述:

类模板 ... 将表示从午夜开始的时间的 std::chrono::duration 拆分为“分解”时间,例如小时:分钟:秒,拆分的精度由 Duration 模板参数确定。...它主要是一种格式化工具。

唯一的区别似乎是chrono::time_of_day提到了 12 小时/24 小时格式,而chrono::hh_mm_ss没有。

Howard Hinnant 的 GitHub 库 time_of_day中定义如下:

template <class Duration>
using time_of_day = hh_mm_ss<Duration>;
Run Code Online (Sandbox Code Playgroud)

那么为什么有两种不同的类型呢?

How*_*ant 8

https://en.cppreference.com/w/很棒,但并不完美. 好吧,也许。你还能从哪里获得这种修复速度?!(请注意此答案下方的第二条评论)。:-)

Howard Hinnant 的 GitHub 库最初只有time_of_day. 这是 C++20 提案的一部分。在标准化过程中,time_of_day更名为hh_mm_ss,并进行了一些 API 调整。

这是提出这些更改的论文:http : //www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1466r3.html

Howard Hinnant 的 GitHub 库“实现”了这一变化,但留下了一个time_of_day类型别名,只是为了与该库的现有用户向后兼容。

总之,没有chrono::time_of_day,只有chrono::hh_mm_sshttp : //eel.is/c++draft/time.hms


请注意下面来自 Nicol Bolas 的非常有用的评论。

  • 请注意,cppreference [未将“time_of_day”列为“std::chrono”的一部分](https://en.cppreference.com/w/cpp/chrono)。清单早在二月份就发生了变化。但是“time_of_day”有一个未链接的页面。 (3认同)