在不使用文字的情况下检测负数的更好方法是什么?

时间:2011-08-04 14:30:36

标签: c++ algorithm

通常要检测负数,您只需if(x < 0) ...。但是,没有硬编码文字的最好的方法是什么?这不是我需要避免的价值,而是数据类型。我正在寻找<algorithm>

风格的东西

我有以下解决方案,但是有更好的方法吗?有些东西告诉我这不是那么有效。

template<typename T>
inline bool is_negative(const T& n)
{
    return n < (n - n);
}

我想使用相同的限制。所以可以要求T实现算术运算符,但没有比这更具体/专业。

否则我们可以通过只要求T实现:

来解决这个问题
  • bool operator <(int)
  • T()(我们假设等于0的默认构造函数)
  • 或者为什么不只需要bool IsNegative()

这只是为了我自己的好奇心;不适用于任何项目。

3 个答案:

答案 0 :(得分:4)

return n < T();

(现在我想知道为什么你有这个限制)。

答案 1 :(得分:3)

if (x < T(0))出了什么问题?

由于您似乎对数字类型感兴趣,因此对这些类型的一个非常自然的要求是它们提供了一个采用基本类型(int或double)的构造函数。

我发现默认构造更自然,它可能不存在,或者具有不同的语义(未定义,非数字等。例如,来自例如。boost::posix_time的时间类,默认构造为无效日期)

答案 2 :(得分:0)

检查某些东西是否小于0是正确的解决方案。这是你最明确的意图。它也是效率最高的,但是当你检查一个数字是否为负时,请不要再考虑效率了。这是件坏事。