Я столкнулся с кодом, выполняющим следующее преобразование:
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++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как я могу обойтись до ближайшего верхнего целого числа и вниз до нижнего целого числа?
Anonymous » » в форуме C# - 0 Ответы
- 7 Просмотры
-
Последнее сообщение Anonymous
-
-
-
От римского к целому числу из Leetcode Неудачный тестовый пример «MCMXCIV»
Anonymous » » в форуме JAVA - 0 Ответы
- 37 Просмотры
-
Последнее сообщение Anonymous
-