Я спорю, могу ли я избавиться от предупреждения компилятора или нет. Предупреждение приходит от сравнения 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, который я не правильно понимаю?
Настройка unsigned
type to -1 — идиоматический способ установить его на максимально возможное значение, независимо от количества битов в типе.
Неуклюжий, но, возможно, более ясный способ написать
translatedAddresss = std::numeric_limits<decltype(translatedAddresss)>::max();
Если бы это было в вашем арсенале библиотек, я бы использовал std::optional
или же boost::optional
Код действителен в соответствии со стандартом, и присваивание, и проверка равенства применяют целочисленные преобразования к своим операндам. Однако, это C-ism для использования значения часового, я бы вместо этого использовал исключение.