Я столкнулся с кодом, выполняющим следующее преобразование:
static_cast(-1)
Насколько я могу судить, стандарт C++ определяет, что происходит при преобразовании целочисленного значения со знаком в целочисленный тип без знака (см.: Что произойдет, если я присвою отрицательное значение к беззнаковой переменной?).
В приведенном выше коде меня беспокоит то, что типы источника и назначения могут иметь разные размеры, и влияет ли это на результат. Будет ли компилятор увеличивать тип исходного значения перед приведением? Будет ли вместо этого он преобразован к беззнаковому целому числу того же размера, а затем увеличит его? Или, возможно, что-то еще?
Чтобы уточнить код,
int nInt = -1;
long nLong = -1; // assume sizeof(long) > sizeof(int)
unsigned long res1 = static_cast(nInt)
unsigned long res2 = static_cast(nLong);
assert(res1 == res2); // ???
В принципе, стоит ли мне беспокоиться о написании кода типа
static_cast(-1L)
над
static_cast(-1)
Подробнее здесь: https://stackoverflow.com/questions/217 ... ed-integer