2016-04-09 12 views
0

Normalerweise verwende ich #define MY_PARRENT_THE_FIRST 1, um weniger Speicher zu verwenden.Beste Äquivalenz von #define in C++

ich für eine beste Äquivalenz in C gesucht ++ darüber und ich fand zwei:

Zuerst ist unter Verwendung von Aufzählungen:

enum class MyParrent : char 
{ 
    theFirst = 1, 
    theSecond = 6, 
    theThird = 64 
} 

Zweite mit Namespace und Variablen:

namespace MyParrent 
{ 
    char const theFirst (1); 
    char const theSecond (6); 
    char const theThird (64); 
} 

jedoch Ich konnte nicht herausfinden, ob irgendwelche von diesen keinen Speicherbedarf als die #define MY_PARRENT_THE_FIRST 1 Anweisung verwenden.

Welches ist die beste Vorgehensweise, um in C++ den gleichen Speicherbedarf zu erreichen (Inline-Einfügen des Werts, anstatt Speicher zuzuweisen und den Wert dort einzufügen)?

+0

'statisch const int MY_PARRENT_THE_FIRST = 1;' sollte keinen Speicherplatz im Speicher belegen. –

+0

kann es nicht in einem Namespace wie der zweiten Version aber mit statischen vor getan werden? – codiac

+0

Sicher kann es im 'Namespace' erscheinen. –

Antwort

0

Typen benötigen keinen Laufzeitspeicher, nur Werte. Dies liegt daran, dass die resultierende ausführbare Datei nicht alles über Typen speichern muss, sondern dass die meisten Variablen gespeichert werden müssen. Ihr enum MyParrent ist ein Typ und nimmt keinen Speicher, aber ein Wert vom Typ enum MyParrent benötigt ein Byte Speicher, da der zugrunde liegende Typ enum MyParrent ein char ist. Wenn Sie Variablen wie in Ihrem zweiten Beispiel definieren, ist das sicher.

PS: Ihre Definition von MY_PARRENT_THE_FIRST erweitert zu einem Ganzzahlliteral 1 und in manchen Fällen nehmen auch zur Laufzeit-Speicher, weil Ganzzahlliterale vom Typ sind int oder sogar etwas breiter Integer-Typ. Sie können dies überprüfen durch:

auto const var = MY_PARRENT_THE_FIRST; 
static_assert(sizeof(var) > sizeof(MyParrent), "");