繁体   English   中英

std::chrono::duration::zero() 的目的是什么

[英]What is the purpose of 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 对象/函数,它具有到每个持续时间类型的隐式转换? 这在非模板情况下可能很有用。

seconds s = durationZero;
minutes m = durationZero;

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

这是为了给实现提供一些灵活性,在zero的持续时间不是由Rep(0)表示的情况下。

std::chrono::duration<Rep,Period>::zero

如果持续时间的表示形式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返回不同的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM