c++ enum auf ein unsigned int-Vergleich

Fand ich dies in den code arbeite ich im moment und dachte, es war die Ursache für einige Probleme, die ich habe.

In einen header irgendwo:

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

Dann später - Initialisierung:

nextIndex = INVALID_INDEX;

und verwenden

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

Debuggen Sie den code, der Werte in nextIndex nicht so Recht Sinn (Sie waren sehr groß), und ich fand, dass es erklärt wurde:

unsigned int nextIndex;

So, die erste Einstellung INVALID_INDEX war underflowing unsigned int, und wenn er auf eine große Anzahl. Ich vermutete, dass war, was das problem verursacht, aber schaut man genauer hin, ist der test

if(nextIndex != INVALID_INDEX)

War richtig verhält, ich.e, es nie ausgeführt die Körper der wenn nextIndex war der "große +ve-Wert".

Ist das richtig? Wie ist das passiert? Ist der enum-Wert, der als implicately cast zu unsigned int denselben Typ wie die variable, und damit wird gewickelt in der gleichen Weise?

Cheers,

xan

ITYM "Dann später - asssignment". Initialisierung wäre unsigned nextIndex = INVALID_INDEX

InformationsquelleAutor | 

Schreibe einen Kommentar