我很好奇,是否有可能编写一个无所不包的实现,例如

template <typename T>
bool overflows(T a, T b)
{
  // ... Returns true or false depending on whether a+b overflows
}

????

如果不是,至少有人可以告诉我如何编写实现
   bool overflows (unsigned int a, unsigned int b)
   {
       // ... returns true or false depending on whether a+b > ~0
   }

???

由于我没有计算机科学学位,因此尽管我了解溢出的概念(如果我们的数字范围为0,1,。),但是我对程序应该如何处理溢出没有任何正规的教育。 ..127,则在64 + 64、65 + 63、66,62等上,“+”操作不起作用)

最佳答案

由于您只是在询问加法,因此您可以针对定义了numeric_limits<T>::max()的类型进行加法操作,并假设ab中至少有一个是非负数。 (可能有一种解决方法,但我看不到简洁的方法。)

template <typename T>
bool overflows(T a, T b)
{
  if(a < b) return overflows(b,a);
  //Since we assumed at least one is non-negative, this now makes sense.
  return b < std::numeric_limits<T>::max() - a;
}

10-07 13:20