可能是重复问题:
如何在C/C++中检测整数溢出的最佳方法
我们如何检查任何算术操作(如加法、乘法或减法)是否可能导致溢出?
可能是重复问题:
如何在C/C++中检测整数溢出的最佳方法
我们如何检查任何算术操作(如加法、乘法或减法)是否可能导致溢出?
首先检查操作数的大小,然后使用std::numeric_limits
。例如,对于加法:
#include <limits>
unsigned int a, b; // from somewhere
unsigned int diff = std::numeric_limits<unsigned int>::max() - a;
if (diff < b) { /* error, cannot add a + b */ }
通常无法可靠地在事后检测算术错误,因此必须在执行前进行所有检查。
您可以轻松地将此方法模板化,使其适用于任何数字类型。
a += b; if (a<b) {//overflow}
,这样可靠吗? - Mooing Duckstd::numeric_limits<unsigned int>::max()
替换为 UINT_MAX
。 - Mooing Ducknumeric_limits
无疑是最统一、可读性最好、自解释性最强、最便携的方式。有没有不使用它的理由呢?你也可以问“有没有一种不用类或for
循环编写C++的方法”……但为什么要这样做呢? - Kerrek SB