обработка ошибок — C ++: установка uint32 в int32 (отрицательное значение)

Я спорю, могу ли я избавиться от предупреждения компилятора или нет. Предупреждение приходит от сравнения uint32 с -1.

Теперь, просто взглянув на это, это кажется неразумным делом, так как uint32 никогда не должен быть отрицательным, хотя я не писал этот код и не так хорошо знаком с способом работы c ++, поэтому я вас спрашиваю. Вот пример кода, чтобы проиллюстрировать, что происходит.

  bool isMyAddressValid = false;
unsigned int myAddress(-1);
unsigned int translatedAddress;

if(isMyAddressValid)
{
translatedAddress = 500;
}
else
{
translatedAddress = -1;
}

myAddress = translatedAddress;

if(myAddress == -1)
{
std::cout << "ERROR OCCURED";
}
else
{
std::cout << "SUCCESS";
}`

Так это действительный код? Это Cism, который я не правильно понимаю?

0

Решение

Настройка unsigned type to -1 — идиоматический способ установить его на максимально возможное значение, независимо от количества битов в типе.

Неуклюжий, но, возможно, более ясный способ написать

translatedAddresss = std::numeric_limits<decltype(translatedAddresss)>::max();
1

Другие решения

Если бы это было в вашем арсенале библиотек, я бы использовал std::optional или же boost::optional

0

Код действителен в соответствии со стандартом, и присваивание, и проверка равенства применяют целочисленные преобразования к своим операндам. Однако, это C-ism для использования значения часового, я бы вместо этого использовал исключение.

0
По вопросам рекламы [email protected]