Я нашел это в коде, над которым я сейчас работаю, и думал, что это стало причиной некоторых проблем, которые у меня возникают.C++ enum to unsigned int сравнение
В заголовке где-то:
enum SpecificIndexes{
//snip
INVALID_INDEX = -1
};
Тогда позже - инициализации:
nextIndex = INVALID_INDEX;
и использовать
if(nextIndex != INVALID_INDEX)
{
//do stuff
}
Отладка кода, значения в NEXTINDEX не совсем сделать (они были очень большими), и я обнаружил, что он был объявлен:
unsigned int nextIndex;
Таким образом, начальная настройка INVALID_INDEX была недопущена неподписанным int и установила его на огромное количество. Я предположил, что это то, что вызывает проблемы, но присмотревшись, тест
if(nextIndex != INVALID_INDEX)
ведет себя правильно, то есть, он никогда не выполнится тело из если когда NEXTINDEX был «большой анолита значение».
Это правильно? Как это происходит? Является ли значение перечисления неявным образом отличным от неподписанного int того же типа, что и переменная, и, следовательно, обертывается таким же образом?
Приветствия,
Xan
ITYM "Затем более поздняя - сортировка". Инициализация будет `unsigned nextIndex = INVALID_INDEX` – MSalters 2008-11-20 12:50:58