В соответствии с правилами о неявных преобразованиях между подписанных и неподписанных целочисленных типов, обсуждаемых здесь и здесь, при суммировании 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
дает ожидаемое значение?