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[];