C++ C+中的自动溢出检测+;?

C++ C+中的自动溢出检测+;?,c++,overflow,C++,Overflow,可能重复: 我经常用大量的代码对C++进行编码,我不能判断溢出是什么时候发生的,即使我使用的是长的或其他64位的数据类型。有没有一种有效的方法来检测溢出发生的时间,而不是观察错误的值?从标准C++中可能不会得到太多: 5种表达方式 4如果在表达式求值期间,结果不是 数学定义的或不在可表示值范围内的 其类型、行为未定义。[注:大多数现有 C++的实现忽略整数溢出。 按零,使用零除数形成余数,并且全部为浮点数 点异常因机器而异,通常可通过 图书馆职能.-尾注] 最好使用中定义的标准固定宽度整数类型

可能重复:


<>我经常用大量的代码对C++进行编码,我不能判断溢出是什么时候发生的,即使我使用的是长的或其他64位的数据类型。有没有一种有效的方法来检测溢出发生的时间,而不是观察错误的值?

从标准C++中可能不会得到太多:

5种表达方式

4如果在表达式求值期间,结果不是 数学定义的或不在可表示值范围内的 其类型、行为未定义。[注:大多数现有 C++的实现忽略整数溢出。 按零,使用零除数形成余数,并且全部为浮点数 点异常因机器而异,通常可通过 图书馆职能.-尾注]

最好使用
中定义的标准固定宽度整数类型,例如
uint32\t


查看
标题,查看错误代码,如
EOVERFLOW
。然后是

中的
溢出\u错误
/
下溢\u错误
类,事实上,您甚至无法可靠地在事件发生后检测溢出,因为有符号整数运算中的溢出会导致未定义的行为。如果编译器可以看到只有在发生溢出的情况下才能到达代码路径,那么就可以完全优化它(因为在未定义的行为情况下,它可以做任何事情)。无符号类型的不同之处在于它们定义了溢出特性(它们执行模运算)

因此,检测有符号类型溢出的唯一方法是事先进行适当的检查,这是非常昂贵的。设计算法的不变量以确保不会出现溢出,这几乎总是更有效的


关于在溢出发生之前检测可能溢出的资源,请参见

,不要使用原始整数值,您可以使用具有重载算术运算符的对象,这些运算符在溢出发生时会引发异常。您对数字执行的操作是什么?@Baget可以是任何操作。加法、减法、乘法、指数等等。取决于程序。在汇编程序中,您可以访问CPU的溢出位,但这当然取决于平台。EOVERFLOW可以通过库函数设置,但不能通过算术运算设置。