是否保证 std::chrono::steady_clock 永远不会环绕?

C.M*_*.M. 4 c++ c++11 c++-chrono

基本上:

auto p1 = std::steady_clock::now().time_since_epoch().count();

... // do smth for unspecified period of time

auto p2 = std::steady_clock::now().time_since_epoch().count();

assert(p2 >= p1);   // is this guaranteed?
Run Code Online (Sandbox Code Playgroud)

?

如果是 - 这是如何保证的?通过确保没有 C++ 程序运行时间超过std::steady_clock::duration::max() - std::steady_clock::duration::zero()?

How*_*ant 8

像这个主题领域的许多事情一样,它很复杂......

是的,它保证steady_clock::now()永远不会换行,因为它保证它总是增加:

http://eel.is/c++draft/time.clock.steady

类对象steady_­clock代表时钟,其值 time_­point永远不会随着物理时间的前进而减少,并且其值以time_­point相对于实时的稳定速率前进。也就是说,时钟可能不会被调整。

但...

这是如何保证的

从技术上讲,不可能永远拥有有限内存滴答的时钟并且永远不会超出范围。所以从技术上讲,答案是否定的。

但 ...

作为一种实用的方式,steady_clock计数的所有实现都nanoseconds使用有符号的 64 位整数类型。范围是 +/-292 年。epoch 通常是您的计算机最后一次启动。所以实际上,它不会在你的一生中结束。因此,当它结束时,这将是其他人的问题,并且所涉及的计算机将获得某种奖励,因为它具有如此长的正常运行时间。

PS:我等不及电脑手册出来了,上面写着:

必须至少每 292 年重新启动一次。

:-)