C ++中#define的最佳等价

时间:2016-04-09 08:02:56

标签: c++ enums namespaces

通常我使用#define MY_PARRENT_THE_FIRST 1来减少使用内存。

我在C ++中搜索了一个关于此的最佳等价,我发现了两个:

首先使用枚举:

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

第二个使用命名空间和变量:

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

但是我无法确定其中是否有任何内容占用了#define MY_PARRENT_THE_FIRST 1语句。

在C ++中实现相同的无内存占用的最佳实践是什么(内联插入值而不是分配内存并在那里插入值)?

1 个答案:

答案 0 :(得分:0)

类型不占用运行时内存,只有值。这是因为生成的可执行文件不需要存储有关类型的所有内容,但需要存储大多数变量。您的enum MyParrent是一种类型且不占用内存,但类型enum MyParrent的值占用一个字节的内存,因为enum MyParrent的基础类型是char。当您在第二个示例中定义变量时,这肯定会占用内存。

PS:您对MY_PARRENT_THE_FIRST的定义扩展为整数文字1,并且在某些情况下可能会在运行时占用内存,因为整数文字的类型为int或甚至更宽整数类型。您可以通过以下方式验证:

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