Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Теоретический вопрос по enum


Автор: Mephisto 1.10.2010, 13:25
Зачем нужна такая форма записи в определении класса:
Код

class SomeClass {
...
private:
    enum { MaxRecentFiles = 5 }; 

    QAction * recentFileActions[MaxRecentFiles]; 
};


В чем преимущество перед обычной константой, или макроподстановкой?

Автор: mes 1.10.2010, 13:50
для данного случая enum является альтернативой будущего constexpr..
погуглите на тему последнего..
к тому же  static const  определенная внутри класса может потребовать внешнего определения
да и поведение отличается на разных компиляторах..

ну а  макроподстановка игнорирует области видимости (и т.д.), что ведет к конфликтам имен..


Автор: kemiisto 1.10.2010, 13:56
[offtopic]Как http://youtu.be/sjj0m2mmdLU Владимир Вольфович, "Лужков должен висеть в центре Москвы" smile Страуструпа я предлагаю расстрелять прилюдно. smile [/offtopic]

Автор: mes 1.10.2010, 13:59
Цитата(kemiisto @  1.10.2010,  12:56 Найти цитируемый пост)
Страуструпа я предлагаю расстрелять прилюдно. 

ну то что Вы ему приговор вынесли уже давно, это я в курсе.. но что именно послужило поводом озвучить его еще раз в этой теме ? 

Автор: djamshud 1.10.2010, 14:00
Давайте лучше растерзаем Вирта?

Автор: mes 1.10.2010, 14:06
Цитата(djamshud @  1.10.2010,  13:00 Найти цитируемый пост)
Давайте лучше растерзаем Вирта? 

чтоб почитатели записали его  в великомученики ?
пусть сначала заслужит ))

Автор: boostcoder 1.10.2010, 14:09
BOOST_STATIC_CONSTANT() в руки ;)

Автор: djamshud 1.10.2010, 14:10
Да скольких он уже замучал своими алголами, модулами и прочими оберонами? С этим пора что-то решатьsmile

Автор: Mephisto 1.10.2010, 18:48
Цитата(mes @  1.10.2010,  14:50 Найти цитируемый пост)
к тому же  static const  определенная внутри класса может потребовать внешнего определения

А вот тут можно подробней?  smile 

Автор: mes 1.10.2010, 19:39
Цитата(Mephisto @  1.10.2010,  17:48 Найти цитируемый пост)
А вот тут можно подробней? 

Код

struct A {
 static const int value =5;
 enum { evalue = 6 };
};

void f (const int& i)
{
     std::cout << i;
}
int main () {
//  f ( A::value  ); 
   f ( A::evalue ); 
}

попробуйте расскоментировать

еще использование константы для задания это нагружение логики и вынужденный обходной маневр компилятора..
как видно в примере
Код

struct A {
 static const int value =5;
};
extern const int extval;
const int get_size () { return A::value; }

int main () {

 int arr  [A::value];
// int arr1 [get_size ()];
// int arr2 [extval];
}
extern const int extval =7;
}

не каждой константой можно задать размер массива..
т.е фактически определяя константу, Вы определяете еще нечто, которое и подставляется в местах использования константы..
грубо говоря для логики это выглядит так :
Код

struct A {

 static const int value  = 5;   constexpr __value    = 5;
 int array [ /*value*/__value ];
};


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)