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