abseil-time-subtraction¶
查找并修复 absl::Time
减法表达式,使其在时间域而不是数值域中进行减法。
在时间减法中存在两种情况可以推断出额外的类型信息。
当结果为
absl::Duration
且第一个参数为absl::Time
时。当第二个参数为
absl::Time
时。
在第一种情况下,我们必须知道操作的结果,因为如果没有这个结果,第二个操作数可能是 absl::Time
或 absl::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);