枚举作为常量的奇怪用法

时间:2013-01-09 15:32:48

标签: c++ enums

  

可能重复:
  Is there a reason to use enum to define a single constant in C++ code?

我刚刚在一些旧代码中遇到了以下片段,奇怪地使用了枚举: -

class MyClass
{
public:
  enum {MAX_ITEMS=16};
  int things[MAX_ITEMS];
...
} ;

这比#define MAX_ITEMS 16好,但与static const int MAX_ITEMS=16;有什么不同?

重新回到内存的迷雾中,我记得有些C ++编译器不允许你在类中初始化consts,而是需要一个单独的......

const int MyClass::MAX_ITEMS = 16;

...在.cpp源文件中。这只是一个旧的解决方法吗?

1 个答案:

答案 0 :(得分:3)

这是用于初始化类定义中的数组的古老 enum hack

传统上,在C ++ 03之前,无法在类声明中初始化static const。由于数组声明在声明中需要编译时常量索引。 枚举黑客 用作解决方法。

class A 
{
    enum { arrsize = 2 };
    static const int c[arrsize] = { 1, 2 };

};