В соответствии с правилами о неявных преобразованиях между подписанных и неподписанных целочисленных типов, обсуждаемых здесь и здесь, при суммировании unsigned int с int, подписанная int сначала преобразуется в unsigned int.
Рассмотрим, например, следующую минимальную программу
#include <iostream>
int main()
{
unsigned int n = 2;
int x = -1;
std::cout << n + x << std::endl;
return 0;
}
Вывод программы, тем не менее, равен 1, как и ожидалось: x сначала преобразуется в целое число unsigned int, а сумма с n приводит к переполнению целого числа, что дает "правильный" ответ.
В коде, подобном предыдущему, если я точно знаю, что n + x положительно, могу ли я предположить, что сумма unsigned int n и int x дает ожидаемое значение?