Преобразование отрицательного целого числа в большее целое число без знака

Я столкнулся с кодом, который выполняет следующее преобразование:

static_cast<unsigned long>(-1)

Насколько я могу судить, стандарт C ++ определяет, что происходит при преобразовании целочисленного значения со знаком в целочисленный тип без знака (см .:Что произойдет, если я назначу отрицательное значение переменной без знака?).

Беспокойство, которое я испытываю в приведенном выше коде, заключается в том, что типы источника и назначения могут иметь разные размеры, и влияет ли это на результат. Будет ли компилятор увеличивать тип исходного значения перед приведением? Вместо этого он приведёт к целому числу без знака того же размера, а затем увеличит его? Или, может быть, что-то еще?

Чтобы уточнить с кодом,

int nInt = -1;
long nLong = -1; // assume sizeof(long) > sizeof(int)

unsigned long res1 = static_cast<unsigned long>(nInt)
unsigned long res2 = static_cast<unsigned long>(nLong);

assert(res1 == res2); // ???

По сути, я должен беспокоиться о написании кода, как

static_cast<unsigned long>(-1L)

над

static_cast<unsigned long>(-1)

Ответы на вопрос(2)

Ваш ответ на вопрос