类型提升abs实现

时间:2013-02-24 18:59:17

标签: c++ c++11 std

虽然std::abs(或{em> C 开发人员的::abs)未提升返回值,因此无法处理std::numeric_limit<T>::min(),但我希望{ {1}}实施,可以进行更“安全”的处理。

abs

我还没想到的是,在升级到int之后(当删除减号时)如何防止转换警告。

有没有更优雅/正确的方法去除减号?

编辑:

现在对于INT_MIN和2complement应该是正确的。

1 个答案:

答案 0 :(得分:0)

由于在使用“等级”低于int的类型的算术运算时,类型提升为int是不可避免的,因此我只看到两种方法来克服此警告:

  1. 复合。 return adder(!value, 1);其中adder函数是a 按位求和器。您可能会发现它是如何在硬件中实现的 自己实施一个。
  2. 简单。 return static_cast<T>(-value)。由于您没有任何可能导致类型T溢出的算术运算,因此“取消”促销到int绝对安全
相关问题