CppCoreGuidelines ES.103 不要产生溢出
23 May 2023
“Don’t overflow”
理由
溢出会使得你的数值算法毫无意义。把数值增加到上限之外会导致内存损坏以及未定义的行为。
坏例子
int a[10]; a[10] = 7; // bad, array bounds overflow for (int n = 0; n <= 10; ++n) a[n] = 9; // bad, array bounds overflow
坏例子
int n = numeric_limits<int>(); int m = n + 1; // bad, numeric overflow
坏例子
int area(int h, int w) { return h * w; } int main() { auto a = area(10'000'000, 100'000'000); // bad, numeric overflow cout << a; return EXIT_SUCCESS; }
-1530494976
例外
如果需要求模运算,可以使用无符号类型。
其他情况:对于允许某些额外开销的关键应用,可以使用检查范围的整型,以及浮点类型。