4

<chrono>头定义steady_clock了表示单调时钟的类 - 即,now()永远不会随着物理时间的增加而减少。虽然这个类没有被标记为可选,所以如果实现不能实现它,因为它运行在一个没有单调时间源的系统上,会发生什么?

看一下libstdc++源码,在_GLIBCXX_USE_CLOCK_MONOTONIC没有被定义的情况下,steady_clock简单定义为:

typedef system_clock steady_clock;

system_clock虽然不一定是稳定的,所以这可能(并且可能会)打破steady_clock.

在没有单调时间源的系统上是否不可能实现 C++11 的一致实现?为什么steady_clock不像类型一样选择可选intX_t

4

1 回答 1

9

我想这样的系统将是某种嵌入式系统。

好吧,这样的系统西红柿可以有独立的实现,只需要标准库的最小子集。<chrono>不是那个最小子集的一部分。

这在 §17.6.1.3 独立实现 [合规] 中定义:

1定义了两种实现:托管独立(1.4)。对于托管实现,本国际标准描述了一组可用的标头。

2一个独立的实现有一组实现定义的头文件。该集合应至少包括表 16 中所示的标题。

表 16 包含以下标题:<ciso646>, <cstddef>, <cfloat>, <limits>, <climits>, <cstdint>, <cstdlib>, <new>, <typeinfo>, <exception>, <initializer_list>, <cstdalign>, <cstdarg>, <cstdbool>, <type_traits>, 和<atomic>.

请注意,这并不意味着这样的实现不能为<chrono>标头提供可以在其中实现的所有内容,但不能提供其余部分。

于 2012-11-22T17:32:56.403 回答