Поскольку неподписанные типы не могут быть отрицательными, попытка установить их в отрицательное значение заставит их обернуться и вместо этого удерживать std::numeric_limits<T>::max() - abs(value) + 1
, где T
- тип, а value
- значение ниже 0
.
В вашем цикле, когда i
достигает 0
, условие i >= 0
все еще выполняется и, таким образом, оно уменьшается до -1
, но это невозможно для неподписанных типов, как объяснено выше, и, таким образом, цикл никогда не завершится.