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 除法,并建议使用返回浮点值的函数。