如果值超过c ++中的最大int范围,我想捕获错误。
try
{
int num = 123123123123123123123312;
cout << num;
}
catch(.....)
{
}
答案 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;