Приведение отрицательного целого числа к большему беззнаковому целому числуC++

Программы на C++. Форум разработчиков
Anonymous
Приведение отрицательного целого числа к большему беззнаковому целому числу

Сообщение Anonymous »

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

Вернуться в «C++»