Редактировать: <cstdlib>
должен обрабатывать перегрузки (и в любом случае должен быть предпочтительным), см. Вопрос здесь
Обратите внимание, что здесь есть некоторые логические ошибки.Прежде всего, то, что вы делаете, вероятно, не то, что вы хотите.res1 - res2
является арифметикой между двумя unsigned
типами, и поэтому результат также будет unsigned
.Если вы опуститесь ниже 0, вы вернетесь к макс.abs()
здесь бессмысленно, это значение никогда не будет отрицательным , потому что тип запрещает его.Даже с заголовком, который компилирует этот код, компилятор все равно предупредит об этом.
Я настоятельно рекомендую вам придерживаться целых чисел со знаком при работе с арифметикой, чтобы избежать этих ловушек, и если вы действительно нужно хранилище, используйте 64-битные целые числа.
Таким образом, мой реальный ответ был бы: переключите unsigned
на int
Также обратите внимание: unsigned res2 = i / res1;
res2 будет усечено до 0 здесьЯ не уверен, хотите ли вы этого или нет.