Is enum static?

John Colvin john.loughran.colvin at gmail.com
Tue Aug 20 03:54:29 PDT 2013


On Tuesday, 20 August 2013 at 09:38:35 UTC, monarch_dodra wrote:
> On Monday, 19 August 2013 at 23:14:12 UTC, Jonathan M Davis 
> wrote:
>> On Monday, August 19, 2013 12:18:36 Borislav Kosharov wrote:
>>> So if I want to have a string constant it is a lot better to
>>> declare it as:
>>> 
>>> static immutable string MY_STRING = "Some string";
>>> 
>>> Because it won't be duplicated?
>>
>> Even if you copy-pasted "Some string" in your code thousands 
>> of times, only
>> one string is allocated, which is one of the advantages of 
>> strings being
>> immutable (the compiler can get away with allocating memory 
>> for string
>> literals only once). But other array literals _do_ result in a 
>> new array
>> allocated every time that they're in the code, and when you 
>> use an enum, its
>> value is copy-pasted every place that it's used, resulting in 
>> a new allocation
>> every time that it's used.
>>
>> So, using string enums is fine, but using other arrays as 
>> enums is usually a
>> bad idea.
>>
>> - Jonathan M Davis
>
> I think one exception to this is when you index an enum. EG:
> enum vals=[1, 2, 3, 0];
>
> auto a = vals[i];
>
> Here, the compiler will not make an allocation (at least, it 
> didn't last time I tested)

is there an allocation in this?

enum vals=[1, 2, 3, 0];

int[4] a;
a[] = vals[];


More information about the Digitalmars-d-learn mailing list