В Руководстве по стилю Google C++ по теме "Беззнаковые целые числа" предлагается, чтобы
Из-за исторической аварии стандарт C++ также использует целые числа без знака для представления размера контейнеров - многие члены органа стандартов считают, что это ошибка, но на данный момент его невозможно зафиксировать. Тот факт, что беззнаковая арифметика не моделирует поведение простого целого числа, но вместо этого определяется стандартом для моделирования модульной арифметики (обертывание при переполнении/потоке), означает, что компилятор не может диагностировать значительный класс ошибок.
Что не так с модульной арифметикой? Разве это не ожидаемое поведение unsigned int?
Какие ошибки (значимый класс) относится к руководству? Переполненные ошибки?
Не используйте тип unsigned, чтобы утверждать, что переменная неотрицательна.
Одна из причин, по которой я могу думать об использовании подписанного int over unsigned int, заключается в том, что если он переполняется (отрицательным), его легче обнаружить.