Beste Antwort
Angenommen, Sie möchten die Größe von (E), wobei E ein Aufzählungstyp ist:
Es kommt darauf an auf den zugrunde liegenden Typ. Normalerweise ist das int, aber wenn Sie enum class
verwenden, können Sie dies in C ++ angeben. In beiden Fällen sollte sizeof den richtigen Wert angeben.
Es gibt keine Standard- oder integrierte Methode zum Bestimmen der Anzahl von Enumeranden in C. oder C ++. Wenn Sie diszipliniert sind und keine Lücken haben, können Sie Folgendes verwenden: Jeder Enumerand außer dem ersten sollte höher sein als sein Vorgänger:
enum Days { Monday, Tuesday, … Saturday, LAST };
Hier entspricht die Anzahl der Tage dem int-Wert von LAST, aber Sie müssen natürlich sicherstellen, dass LAST tatsächlich der letzte ist. Der Compiler kann dies nicht erzwingen.
Wenn Sie nicht bei Null beginnen, sondern aus irgendeinem Grund bei 7 beginnen, können Sie LAST – Monday berechnen:
enum Days { Monday = 7, Tuesday, … Saturday, LAST };
int numDays = LAST - Monday; // still yields 7
Stellen Sie hier auch sicher, dass Montag bleibt an erster Stelle .
Antwort
Eine Aufzählung (kurz für Aufzählung ) ist Eine Technik, um Zahlen eine Bedeutung zu verleihen. Computer können nur in Zahlen arbeiten, und Aufzählungen lassen uns so tun, als würden diese Zahlen eher eine Qualität als eine Quantität beschreiben.
Eine der bekanntesten Aufzählungen ist die Codierung, die wir zum Speichern von Text verwenden. Die Idee ist, jedem unserer Buchstaben eine Nummer zuzuweisen, ähnlich wie ein Buch für Kinder einen numerischen Code schreibt. Der von uns verwendete Code sieht ungefähr so aus:
A = 65, B = 66, C = 67, … Z = 90; a = 97, b = 98, c = 99, … z = 122.
Wenn Sie sich auf einem Windows-Computer befinden, versuchen Sie Folgendes: Klicken Sie auf eine Stelle, an der Sie Text eingeben können. Halten Sie die ALT-Taste gedrückt Geben Sie eine dieser Zahlen auf Ihrem Ziffernblock ein, während Sie sie gedrückt halten. Beispiel: [Alt gedrückt halten] 65 [Alt loslassen]. Der Buchstabe A wird angezeigt. Dies ist eine wirklich alte Methode zum direkten Eingeben von Zeichen Es ist meistens nützlich, um internationale Zeichen einzugeben, wenn Sie nicht die richtige Tastatur installiert haben: Çüéâäàåçê … sind das, was ich von Alt + 128, 129, 130 usw. erhalte. Dies ist eine Möglichkeit zum Belichten die zugrunde liegende Aufzählung von Zeichen.
Es ist nichts Magisches daran, die Zahl 65 als A zu wählen; Das einzige, was zählt, ist, dass wir konsequent sind. Eine Aufzählung ist also eine Methode, um nicht numerischen Ideen Zahlen zuzuweisen und die Arbeit mit dem Code ein wenig zu vereinfachen.
Wohlgemerkt, ist nützlich, wenn die Reihenfolge der Zeichen mit der alphabetischen Reihenfolge übereinstimmt (zumindest in Englisch). Dies erleichtert das Schreiben von Zeichenfolgensortierungen, die die Dinge in alphabetischer Reihenfolge sortieren, da Sie den numerischen Wert betrügen und vergleichen können. In anderen Sprachen wird es etwas schwieriger, da die den Zeichen zugewiesenen numerischen Werte nicht immer mit der alphabetischen Reihenfolge übereinstimmen.
Nehmen wir für ein anderes Aufzählungsbeispiel an, wir schreiben ein Programm, das behandelt werden soll bei Netzwerkverbindungen. Netzwerkverbindungen können verschiedene Zustände haben: lauschen , open , geschlossen oder in einem Fehlerzustand . Dies sind Qualitäten, keine Mengen und Dafür ist eine Aufzählung gedacht:
enum ConnectionState {
NCON\_LISTEN,
NCON\_OPEN,
NCON\_CLOSED,
NCON\_ERROR
};
Meiner Meinung nach ist es normalerweise besser, Ihre Aufzählungen in eine Klassendefinition einzubetten. Auf diese Weise können Sie die Präfixe überspringen:
class Connection {
public:
enum State {
LISTEN, OPEN, CLOSED, ERROR
};
};
Der Typ ist Connection::State
und die Werte sind Connection::LISTEN
, Connection::OPEN
usw. Ich denke, das ist klarer.
Ihr Beispiel für das Mischen von numerischen Werten und Aufzählungswerten funktioniert nicht. “ Es macht keinen Sinn, alle aufgezählten Werte müssen mit einem Buchstaben beginnen. Normalerweise können Sie keine Zahl verwenden, bei der eine Aufzählung erwartet wird. C ++ – Compiler behandeln Ints und Enums als unterschiedliche Typen. Es ist nicht verboten, aussagekräftige Zahlen mit Aufzählungswerten zu verknüpfen (beachten Sie, wie nützlich dies für die alphabetische Reihenfolge ist), aber dies ist nicht die Standardpraxis.
Können Sie eine Aufzählung ausgeben oder eingeben? Da es sich jedoch um einen benutzerdefinierten Typ handelt, müssen Sie dazu Ihre eigenen Operatoren >> und