2016-07-12 6 views
1

Ich verstehe die Vorteile der stark typisierten "Enum-Klasse" gegenüber "Enum", aber ein Klassenkamerad und ich wundere mich, wenn der eine oder andere mehr Speicher beansprucht.Gibt es in C++ einen Unterschied in der Speichernutzung zwischen "Enum-Klasse" und "Enum"?

+2

Ich sehe keinen Grund für die Enum-Klasse, mehr Speicher zu verwenden (es sei denn, Sie haben den großen Basistyp angegeben). Warum nicht ein einfaches Programm erstellen und experimentieren? –

+1

Ich könnte mir vorstellen, dass die meisten Unterschiede während der Kompilierung behandelt werden, nicht zur Laufzeit (keine Änderung im Speicher). Dies sollte jedoch ziemlich einfach zu testen sein - mach einfach zwei (fast) identische Programme, kompiliere und vergleiche. – Conduit

Antwort

3

enum class s sind immer noch nur ganzzahlige Werte ohne zusätzlichen Aufwand. Ein enum class zugrunde liegender Typ ist jedoch standardmäßig int, während reguläre enum der Typ ist nicht angegeben und die Implementierung ist frei, einen minimalen Integraltyp auszuwählen. In der Theorie, wenn Sie den zugrunde liegenden Typ nicht angeben, kann ein enum class größer sein als ein einfacher enum.

C++ Spezifikation 7.2.5 - Enumeration Abbremsung

enum class

der zugrunde liegende Typ explizit angegeben werden kann ENUM-Basis verwendet wird; Wenn nicht explizit angegeben, ist der zugrunde liegende Typ eines Bereichsauflistungstyps int.

enum

Wenn kein Initialisierer zum ersten Enumerator angegeben wird, hat der Initialisierungswert eine unspezifizierte integralen Typ.

+0

Vielen Dank für eine ausgezeichnete, gut dokumentierte und leicht verständliche Antwort! – jamesc1101

+1

Es ist auch eine hervorragende Lektion zu lernen, dass wenn Speicher Einschränkungen sind ein Anliegen, ich den Datentyp angeben kann zu verwenden. Zum Beispiel: enum class Farbe: char {Rot, Weiß, Blau}; – jamesc1101