提问者:小点点

std::chrono::duration::zero()的用途是什么


为什么有一个静态函数返回std::chrono::duration类型的零表示形式?

不是:

std::chrono seconds s;
s = std::chrono::seconds(0);

与:

std::chrono::seconds s;
s = std::chrono::seconds::zero()

是否有一个通用的Chrono::duration::Zero对象/函数,它隐式地转换为每个duration类型?这在非模板情况下可能很有用。

seconds s = durationZero;
minutes m = durationZero;

这样,更改持续时间类型/精度将不会影响“零赋值”。


共1个答案

匿名用户

rep(0)不表示zero的持续时间的情况下,它为实现提供了一些灵活性。

std::chrono::duration::0

如果持续时间的表示形式rep要求其他实现返回零长度的持续时间,则可以专用std::chrono::duration_values以返回所需的值。

使用std::chrono::seconds(0)不会有问题,但如果使用模板,则some_duration::zero()将表示零持续时间,但some_duration(0)可能不会。

或者您想要确定是否已经过了一段时间,而您不能或不想对duration类型做任何假设。

auto t1 = some_clock::now();

// so something

auto t2 = some_clock::now();
some_clock::duration d = t2 - t1; // where you don't want to make any assumtions about duration

if ( d == some_clock::duration::zero() ) {
  // no time elapsed according to some_clock
}

您可能始终能够将std::chrono::seconds(0)强制转换为另一种表示形式,但如果您希望在some_duration基于模板参数的情况下获得零持续时间,则使用some_duration::zero()会更清楚。

我从未遇到过这样的用例,目前也找不到有意义的例子。如果您希望zero始终为0°C,那么我唯一想到的是温度相关的问题,因此对于°F和°K,zero将返回不同的值。