尝试并捕获Int范围限制

时间:2018-02-08 16:07:44

标签: c++

如果值超过c ++中的最大int范围,我想捕获错误。

try
{
    int num = 123123123123123123123312;
    cout << num;
}
catch(.....)
{

}

1 个答案:

答案 0 :(得分:2)

  

如果值超过c ++中的最大int范围,我想捕获错误。

无法捕获任何内容,因为未指定整数转换以抛出任何内容。 num只会有一个实现定义的值 - 或者如果123123123123123123123312太大而无法在系统上用任何整数类型表示,那么该程序就是格式不正确。

可能编译器足够聪明以“捕获”此错误并警告您。在整数文字不能由任何整数类型表示的情况下,编译器需要通知您。

  

我认为运行时整数溢出是我正在搜索的内容。

当您对有符号整数执行算术运算(例如加或减)时会发生整数溢出,并且整数类型无法表示结果。

也不可能“捕获”整数溢出。发生整数溢出时,行为未定义。您无法知道是否发生了整数溢出,但您可以检查是否会发生整数溢出:

int a = getvalue();
int b = getvalue();

bool addWouldOverflow = false; // also check for underflow
if((b < 0) && (a < std::numeric_limits<int>::min() - b))
    addWouldOverflow = true;
else if((b > 0) && (a > std::numeric_limits<int>::max() - b))
    addWouldOverflow = true;

if(addWouldOverflow)
    throw std::overflow_error("Oops! input is bad :(");
else
    return a + b;