Я нашел это в коде, над которым я сейчас работаю, и подумал, что это стало причиной некоторых проблем, с которыми я столкнулся.
В шапке где-то:
enum SpecificIndexes{
//snip
INVALID_INDEX = -1
};
Потом - инициализация:
nextIndex = INVALID_INDEX;
и используйте
if(nextIndex != INVALID_INDEX)
{
//do stuff
}
Отладка кода, значения в nextIndex не совсем имеют смысл (они были очень большими), и я обнаружил, что он был объявлен:
unsigned int nextIndex;
Итак, первоначальная настройка INVALID_INDEX была недостаточной для целого числа unsigned и установила его в огромное число. Я предположил, что это было причиной проблемы, но при более внимательном рассмотрении, тест
if(nextIndex != INVALID_INDEX)
Вела себя правильно, то есть никогда не выполняла тело оператора if, когда nextIndex был значением «large + ve».
Это правильно? Как это происходит? Является ли значение enum косвенным образом приведенным к типу int без знака того же типа, что и переменная, и, следовательно, переносится таким же образом?
Приветствия
1024 * Xan *