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

Why are time_of_day and hh_mm_ss two different types in C++20?

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

The class template ... splits a std::chrono::duration representing time since midnight into a "broken down" time such as hours:minutes:seconds, with the precision of the split determined by the Duration template parameter. ... It is primarily a formatting tool.

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

Howard Hinnant's GitHub librarytime_of_day是这样定义的:

template <class Duration>
using time_of_day = hh_mm_ss<Duration>;

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

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

Howard Hinnant's GitHub library原来只有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's GitHub library“实施”了此更改,但留下了一个 time_of_day 类型别名,只是为了向后兼容该库的现有用户。

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


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