c++ - Ist es eine gute Praxis, enum als int zu verwenden?

Translate

Ich habe also eine Variable "state" in einer Klasse. Ich möchte es als Ganzzahl deklarieren, damit ich einige if-Anweisungen speichern kann.

int state;

Eine Möglichkeit, dies zu tun, besteht darin, einen Aufzählungsstatus {Eins = 0, Zwei = 1, Drei = 3} zu deklarieren. In der switch-Anweisung wird dann Folgendes angezeigt:

switch (state)
{
case One:
    dosomething();
    break;
case Two:
    dosomething();
    break;
case Three:
    dosomething();
    break;
}

Ist es also eine gute Praxis, eine solche Aufzählung zu verwenden? Gibt es einen besseren Weg, dies zu tun?

Vielen Dank!

This question and all comments follow the "Attribution Required."

Alle Antworten

Translate

Ja, das ist ein guter Weg, es zu tun. Sie verwenden in der RegelenumsUm das Leben einfacher zu machen, sind viele verschiedene Zahlen, die anderen Programmierern nicht wirklich etwas sagen, nicht sehr hilfreich.

Dies ist also eine sehr gute Art, es zu verwenden. Es macht Ihren Code lesbar und verständlich.

Obwohl @James McNellis darauf hingewiesen hat, ist es eine schlechte Idee, Ihre Aufzählungen wie "1,2,3,4" zu benennen, da sie nicht ausdrücken, was sie wirklich tun.

Aber ich vermute, das war nur ein Beispiel von Ihrer Seite.

Betrachten Sie stattdessen Folgendes:

switch (operationState)
{
    case Waiting:
        dosomething();
        break;
    case Running:
        dosomething();
        break;
    case Ended:
        dosomething();
        break;
}

In diesem Fall lautet die "Operation" entweder: Warten, Ausführen oder Beendet, wodurch sie lesbar und verständlich wird. Betrachten Sie nun den Weg ohne Aufzählungen:

switch (iState)
{
    case 997:
        dosomething();
        break;
    case 998:
        dosomething();
        break;
    case 999:
        dosomething();
        break;
}

Was sagt dir 997? AbsolutNichts! Verwenden Sie lesbaren und verständlichen Code, um jedem das Leben zu erleichtern.

Quelle
Translate

Der gesamte Code, den Sie oben haben, funktioniert genauso gut, wenn Sie habenstatedeklariert alsStateeher als einint. Sie können es in einer switch-Anweisung verwenden, neue Werte zuweisen, Vergleiche damit anstellen usw. Die Verwendung von a hat wirklich keine Vorteileinthier, da das im Wesentlichen "im Quellcode liegt". Ihre Variable ist keine Ganzzahl. Es ist nicht sinnvoll, ihn mit einem Wert zu multiplizieren oder zu dividieren oder ihn nach links oder rechts zu verschieben. Markieren der Variablen alsStatemacht klarer, dass Sie wirklich einen von mehreren Werten haben, und verhindert, dass Sie einige der oben genannten Fehler machen. Außerdem hat der Compiler eine bessere Chance, solche Dinge zu diagnostizieren:

state = 137; // Error!  Can't do this assignment without a cast.

Verwenden Sie das Typensystem im Allgemeinen zu Ihrem Vorteil. Wenn es ein istintmach es zu einemint. Wenn es sich um einen Aufzählungstyp handelt, machen Sie ihn zu einem Aufzählungstyp.

Quelle
Translate

Die Verwendung lesbarer Statusnamen in einer switch-Anweisung anstelle von Zahlen scheint mir gut zu sein. Und ich denke nicht, dass dies auch die Leistung beeinträchtigen wird.

Also kein Grund, keine Aufzählungen zu verwenden!

Quelle
Leave a Reply
You must be logged in to post a answer.
Über den Autor