为什么C++20中的time_of_day和hh_mm_ss是两种不同的类型?
C++20 标准定义了两种存储白天时间的类型:chrono::hh_mm_ss和chrono::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>;
那么为什么有两种不同的类型呢?
回答
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_ss:http : //eel.is/c++draft/time.hms
请注意下面来自 Nicol Bolas 的非常有用的评论。
- Note that cppreference [doesn't list `time_of_day` as being part of `std::chrono`](https://en.cppreference.com/w/cpp/chrono). The listing was changed back in February. But there is an unlinked page for `time_of_day`.