当我将 astd::abs(int)
与unsigned
. 实际上,std::abs
返回有符号值。为什么会做出这样的选择?它将解决负值的绝对值不能用有符号类型表示的问题。
然后,有没有比这更干净的东西(即没有演员表)以避免警告?
#include <cassert>
#include <cstdlib>
// max(1, lhs + rhs). (lhs must be > 0)
unsigned add(unsigned lhs, int rhs)
{
return
(0 < rhs || static_cast<unsigned>(-rhs) < lhs
? rhs + lhs
: 1);
}
int main()
{
assert(add(42, -41) == 1);
assert(add(42, 0) == 43);
assert(add(42, 1) == 43);
assert(add(42, -51) == 1);
}