枚举作为常量的奇怪用法

Odd use of enum as a constant

本文关键字:用法 常量 枚举      更新时间:2023-10-16

可能重复:
是否有理由在C++代码中使用枚举来定义单个常量?

我刚刚在一些旧代码中发现了以下片段,其中使用了enum:-

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

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

回到内存的迷雾中,我记得一些C++编译器不允许初始化类中的常量,而是需要一个单独的。。。

const int MyClass::MAX_ITEMS = 16;

在.cpp源文件中。这只是一个老办法吗?

这是旧的"enum hack">,用于初始化类定义内的数组。

传统上,在C++03之前,不可能在类声明中初始化static const。由于数组声明中需要一个编译时常量索引。枚举破解被用作一种变通方法。

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