abseil-time-subtraction

查找并修复 absl::Time 减法表达式,使其在时间域而不是数值域中进行减法。

在时间减法中存在两种情况可以推断出额外的类型信息。

在第一种情况下,我们必须知道操作的结果,因为如果没有这个结果,第二个操作数可能是 absl::Timeabsl::Duration。在第二种情况下,第一个操作数 *必须* 是 absl::Time,因为从 absl::Duration 中减去 absl::Time 是未定义的。

示例

int x;
absl::Time t;

// Original - absl::Duration result and first operand is an absl::Time.
absl::Duration d = absl::Seconds(absl::ToUnixSeconds(t) - x);

// Suggestion - Perform subtraction in the Time domain instead.
absl::Duration d = t - absl::FromUnixSeconds(x);


// Original - Second operand is an absl::Time.
int i = x - absl::ToUnixSeconds(t);

// Suggestion - Perform subtraction in the Time domain instead.
int i = absl::ToInt64Seconds(absl::FromUnixSeconds(x) - t);