Jer*_*emy 6 c++ std c++-chrono
的rep类型std::chrono::system_clock必须是有符号算术类型,而steady_clock和high_resolution_clock(和自定义时钟类型)不需要有符号rep类型。
这种区别的基本原理是什么,使用无符号rep类型的时钟会产生什么后果?
其基本原理是让供应商有更多的steady_clock自由度high_resolution_clock。事后看来,这种自由并不是必要的,因为迄今为止的所有实现都使用有符号整数类型。
在这些时钟中使用无符号的后果rep是它们的duration嵌套类型不会是六个“预定义”持续时间之一:
nanoseconds
microseconds
milliseconds
seconds
minutes
hours
Run Code Online (Sandbox Code Playgroud)
因为这些都是需要签字的。此外,使用无符号时钟的客户端在从该时钟中减去 srep时必须小心:减去when会导致无符号溢出值:定义良好,但可能是意外的。time_pointt0 - t1t0 < t1
这样的时钟可以安全使用,并且确实存在无符号溢出的用例。但一般来说,它可能更容易出错。
这个纬度没有扩展到的原因system_clock是希望能够system_clock跟踪Unix Time,并且我想要求 1970-01-01 00:00:00 UTC 之前的日期时间可以用 表示system_clock::time_point。 system_clock是与人类日历相关的唯一时钟。
在 C++20 规范草案中,最终将指定Unix 时间system_clock::time_point关系,并且与民用日历之间的转换将更加容易,包括 1970-01-01 00:00:00 UTC 之前的日期时间。
但steady_clock仍然是一个“秒表”:非常适合计时,但与人类日历没有任何关系。
| 归档时间: |
|
| 查看次数: |
346 次 |
| 最近记录: |