Expressions and statements
ES.103
Не допускайте переполнения
Причина
Переполнение обычно делает ваш числовой алгоритм бессмысленным. Увеличение значения сверх максимального может привести к повреждению памяти и неопределённому поведению.
Пример (плохой)
int a[10];
a[10] = 7; // плохо, выход за пределы массива
for (int n = 0; n <= 10; ++n)
a[n] = 9; // плохо, выход за пределы массива
Пример (плохой)
int n = numeric_limits<int>::max();
int m = n + 1; // плохо, числовое переполнение
Пример (плохой)
int area(int h, int w) { return h * w; }
auto a = area(10'000'000, 100'000'000); // плохо, числовое переполнение
Исключение
Используйте беззнаковые типы, если вам действительно нужна модульная арифметика.
Альтернатива: Для критически важных приложений, допускающих некоторые накладные расходы, используйте целочисленные и/или вещественные типы с проверкой диапазона.
Контроль
???