gpt4 book ai didi

c++ - `rep` 时钟中的有符号和无符号 `std::chrono`

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:06:51 24 4
gpt4 key购买 nike

std::chrono::system_clockrep 类型必须是有符号算术类型,而 steady_clock high_resolution_clock(和自定义时钟类型)不需要具有签名的 rep 类型。

这种区别的基本原理是什么?使用无符号 rep 类型的时钟会产生什么后果?

最佳答案

这样做的理由是让供应商在 steady_clock 上有更多的自由。和 high_resolution_clock .事后看来,这种自由并不是必需的,因为迄今为止所有的实现都使用带符号的整数类型。

使用未签名的 rep 的后果在这些时钟中是他们的 duration嵌套类型不会是六个“预定义”持续时间之一:

nanoseconds
microseconds
milliseconds
seconds
minutes
hours

因为这些都是需要签名的。还有使用未签名 rep 的时钟的客户端必须小心减去 time_point来自那个时钟的 s:减去 t0 - t1什么时候t0 < t1会导致无符号溢出值:定义明确,但可能出乎意料。

这样的时钟可以安全使用,并且确实存在无符号溢出的用例。但一般来说它可能更容易出错。

此纬度未扩展到 system_clock 的原因是希望system_clock会跟踪 Unix Time ,我想要求 1970-01-01 00:00:00 UTC 之前的日期时间在 system_clock::time_point 中表示. system_clock是与人类日历相关的唯一时钟。

在 C++20 规范草案中,Unix Time最终会指定关系,system_clock::time_point之间的转换会容易得多和民用日历,包括 1970-01-01 00:00:00 UTC 之前的日期时间。

但是steady_clock仍然是一个“秒表”:非常适合计时,但与人类日历没有任何关系。

关于c++ - `rep` 时钟中的有符号和无符号 `std::chrono`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52495777/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com