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

Возможный дубликат:
   Есть ли причина использования 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
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, источник
pro.cxx
pro.cxx
3 049 участник(ов)

C/C++ chat 0. Простые вопросы, лабы и о IDE — в чат новичков @supapro 1. Не хамим, не переходим на личности, не вбрасываем утверждения без доказательств 2. No Ads, offtop, flood Объявления о вакансиях и евенты - в лс @AlexFails https://t.me/ProCxx/259155

supapro.cxx
supapro.cxx
1 925 участник(ов)

Чат для тех, кто немного знает C++, простые вопросы по реализации, синтаксису и ide – сюда, а для другого есть: /Главный чат по серьезным вопросам — @ProCxx /Чат по обсуждению всего — @fludpac

C++ Russia
C++ Russia
384 участник(ов)

Сообщество разработчиков C++ в Telegram.

cxx.Дискуссионная
cxx.Дискуссионная
298 участник(ов)

это не двач, общайтесь вежливо; разговор на почти любые темы; Не согласны с баном? В лс @AlexFails, @ivario

C++ для маленьких и тупых
C++ для маленьких и тупых
105 участник(ов)

Лоу левел (по среднему IQ участников) чатик ExtremeCode @extremecode Флудилка @extremecode_rest