abseil-duration-division¶
absl::Duration
的算术运算类似于整数。这意味着两个 absl::Duration
对象的除法将返回一个 int64
,任何小数部分将被截断为 0。有关 absl::Duration
算术运算的更多信息,请参见 此链接。
例如
absl::Duration d = absl::Seconds(3.5);
int64 sec1 = d / absl::Seconds(1); // Truncates toward 0.
int64 sec2 = absl::ToInt64Seconds(d); // Equivalent to division.
assert(sec1 == 3 && sec2 == 3);
double dsec = d / absl::Seconds(1); // WRONG: Still truncates toward 0.
assert(dsec == 3.0);
如果需要浮点数除法,可以使用 absl::FDivDuration()
函数,或使用单位转换函数,例如 absl::ToDoubleSeconds()
。例如
absl::Duration d = absl::Seconds(3.5);
double dsec1 = absl::FDivDuration(d, absl::Seconds(1)); // GOOD: No truncation.
double dsec2 = absl::ToDoubleSeconds(d); // GOOD: No truncation.
assert(dsec1 == 3.5 && dsec2 == 3.5);
此检查会查找在浮点上下文中执行的 absl::Duration
除法,并建议使用返回浮点值的函数。