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"?
Antwort
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.
Vielen Dank für eine ausgezeichnete, gut dokumentierte und leicht verständliche Antwort! – jamesc1101
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
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? –
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