Посмотрите эту цитату с здесь внизу страницы. . (Я считаю, что цитируемый комментарий о const
s относится и к invariant
s)
Перечисления отличаются от констант тем, что они не занимают места в конечном выводимом объекте/библиотеке/исполняемом файле, тогда как константы это делают.
Таким образом, очевидно, что value1
будет раздувать исполняемый файл, а value2
рассматривается как литерал и не отображается в объектном файле.
const int value1 = 0xBAD;
enum int value2 = 42;
Вернувшись в C++, я всегда предполагал, что это было связано с устаревшими причинами и старыми компиляторами, которые не могли оптимизировать константы. Но если это все еще верно в D, за этим должна быть более глубокая причина. Кто-нибудь знает, почему?