为什么会有一个静态函数返回std::chrono::工期类型的零表示?
不是:
std::chrono seconds s;
s = std::chrono::seconds(0);与以下完全相同:
std::chrono::seconds s;
s = std::chrono::seconds::zero()是否有一个一般的时间序列::工期::零对象/函数,它将隐式转换为每种持续时间类型?这在非模板情况下可能很有用。
seconds s = durationZero;
minutes m = durationZero;这样,更改持续时间类型/精度不会影响“零赋值”。
发布于 2020-11-17 14:52:53
它为实现提供了一定的灵活性,在zero的持续时间不是由Rep(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返回不同的值。
https://stackoverflow.com/questions/64877472
复制相似问题