如何在 C++ 中检测整型溢出?
唯一安全的方法是在整数溢出发生前进行检查。有一些迂回的方式可以检查整数溢出。所以如果你想检测无符号整数加法的溢出,你可以检查结果是否实际小于任何一个加数。例如:
unsigned int x, y; unsigned int value = x + y; bool overflow = value < x; // Alternatively "value < y" should also work
这是因为如果 x 和 y 都是无符号整数,如果相加后发生了溢出,它们的值不能大于任何一个加数,因为它们需要大于最大可能的无符号整数,才能环绕并超过这些值。
另一种方法是尝试访问 CPU 中的溢出标志。一些编译器提供了对其的访问,然后你可以对其进行测试,但这并不是标准的。
还有其他方法可以实现此目的,但它们仅提供估计。你可以在此处查看它们 − https://stackoverflow.com/a/199455/3719089
广告