Преобразование отрицательного целого числа в большее целое число без знака
Я столкнулся с кодом, который выполняет следующее преобразование:
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)