如何检测 C++ 中的整型溢出?


检测溢出的唯一安全方法是在溢出发生前进行检查。不过,有一些迂回的方式可以用来检查整型溢出。因此,如果你想检测无符号 int 加法中的溢出,可以检查结果是否实际小于添加的任何一个值。例如,

unsigned int x, y;
unsigned int value = x + y;
bool overflow = value < x; // Alternatively "value < y" should also work

这是因为如果 x 和 y 在加法时都是无符号 int 并且发生溢出,它们的数值就不可能大于这两个数中的任何一个,因为它需要大于最大可能无符号 int 才能回绕并跑到这些值的前面。

另一种方法是尝试访问 CPU 中的溢出标志。有些编译器会提供对它的访问,你可以在测试后进行检查,但这并不是标准的做法。

还有其他一些方法可以实现这一目的,但它们只能提供估计值。你可以在这里查看它们 − https://stackoverflow.com/a/199455/3719089


更新时间: 2020 年 6 月 24 日

1K+ 浏览

开启你的职业生涯

完成课程以获得认证

开始吧
广告