C ++草案par 20.12.7.3 读取:
的同义词
high_resolution_clock
可能是system_clock
或steady_clock
当然,可能强制要求,但我不知道:
high_resolution_clock
对于typedef的其他内容是否有任何意义?system_clock
和high_resolution_clock
,再次默认为typedef
解决方案? 答案 0 :(得分:4)
规范有措辞的原因如"可能"和" can"以及允许其他可能性的其他含糊不清的词来自规范编写者不希望(不必要地)限制"更好"的实现的愿望。某事的解决方案。
想象一个系统,其中一般的时间以秒为单位计算,而system_clock
就是那个 - system_clock::period
将返回1秒。此时间存储为单个64位整数。
现在,在同一系统中,还有一个以纳秒为单位的时间,但它存储为128位整数。由于这种大整数格式,所得到的时间计算稍微复杂一些,并且对于那些只需要1s精度的人来说(在系统中进行大量的时间计算),你不会想要当系统不需要时,使用high_precision_clock
会有额外的惩罚。
至于现实生活中是否有这样的事情,我不确定。关键是,如果你愿意实施它,它不会违反标准。
请注意,稳定非常属于"当系统改变时间时会发生什么? (例如,如果外部网络已经关闭了几天,并且系统中的内部时钟已从网络时间更新的原子钟中消失)。使用steady_clock
将保证时间不会倒退或突然间突然向前跳跃25秒。同样,当有一个"闰秒时,没有问题。或类似的计算机系统时间调整。另一方面,system_clock
保证为您提供正确的新时间,如果您给它一个超过夏令时的前进持续时间,或某些此类,steady_clock
将在一小时一小时内打勾, 而不管。因此,选择正确的一个将影响您在数字电视录像机中录制您最喜爱的节目 - steady_clock
将在错误的时间录制[我的DTV录像机几年前做错了,但它们似乎已修复它现在]。
system_clock
还应考虑用户(或系统管理员)更改系统中的时钟,steady_clock
不应该这样做。
同样,high_resolution_clock
可能是也可能不是steady
- 它可以由C ++库的实现者提供给is_steady
的适当响应。
在<chrono>
的4.9.2版本中,我们找到了此using high_resolution_clock = system_clock;
,因此在这种情况下,它是直接typedef
(使用不同的名称)。但规范并不需要这个。