Нечетное использование перечисления как константы

Возможный дубликат:
   Есть ли причина использования enum для определения одной константы в коде C ++?

Я просто наткнулся на следующий фрагмент в каком-то старом коде, с нечетным использованием перечисления:

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. Это просто старое обходное решение для этого?

3
добавлено отредактировано
Просмотры: 2
nl ja de
Yes.⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣⁣
добавлено автор R. Martinho Fernandes, источник
Возможно, вы помните, что не могли инициализировать то, что не было интегральным типом static const , что было до C ++ 11.
добавлено автор chris, источник

1 ответы

Это возраст " enum hack " используется для инициализации массивов внутри определения класса.

Традиционно pre C ++ 03 было невозможно инициализировать static const внутри объявления класса. Поскольку объявление объявления требует индекса константы времени компиляции в декларации. В качестве обходного пути использовался enum hack .

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

};
3
добавлено
@ Родди: Точно. Я не понимаю, почему Q закрывается как дубликат, потому что это не так. Он не спрашивает, какой из них лучше, перечислить или const, который задает, конкретный Q.
добавлено автор Alok Save, источник