C++ enum pour unsigned int comparaison

J'ai trouvé ça dans le code, je travaille en ce moment et pensait que c'était la cause de certains problèmes que je vais avoir.

Dans un en-tête quelque part:

enum SpecificIndexes{
    //snip
    INVALID_INDEX = -1
};

Puis plus tard - initialisation:

nextIndex = INVALID_INDEX;

et l'utilisation

if(nextIndex != INVALID_INDEX)
{
    //do stuff
}

Débogage du code, les valeurs de nextIndex n'a pas tout à fait le faire sence (ils étaient très gros), et j'ai trouvé qu'il a été déclaré:

unsigned int nextIndex;

Donc, le réglage initial pour INVALID_INDEX était underflowing la unsigned int et la valeur d'un grand nombre. J'ai supposé que c'était ce qui était à l'origine du problème, mais en regardant de plus près, le test

if(nextIndex != INVALID_INDEX)

Était de se comporter correctement, j'.e, il n'a jamais exécuté le corps de la si quand nextIndex était le "grand +ve valeur".

Est-ce correct? Comment est-ce arrivé? Est la valeur d'enum être implicitement converti en unsigned int du même type que la variable, et donc d'être enveloppé dans de la même façon?

  • ITYM "Puis, plus tard - asssignment". Initialisation serait unsigned nextIndex = INVALID_INDEX