为什么有一个静态函数返回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;
这样,更改持续时间类型/精度将不会影响“零赋值”。
在rep(0)
不表示zero
的持续时间的情况下,它为实现提供了一些灵活性。
std::chrono::duration
如果持续时间的表示形式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
将返回不同的值。