On Monday, December 02, 2013 06:57:32 CJS wrote: > I was reading the enum page of Ali Çehreli's (excellent) D book > (http://ddili.org/ders/d.en/enum.html), and I'm confused by an > enum value (not enum type), such as > enum secondsPerDay = 60 * 60 * 24; > In that situation I would have used an immutable variable. Is > there any reason to prefer enum vs. immutable when defining > constants?
enum doesn't create a variable, so if all you really want is for the value to be used and don't care about having an actual variable, there's really no reason to use an immutable variable. Also, enum has the advantage that it _has_ to be known at compile time even if it's a local variable, so its value with be determined at compile time, not runtime, which is almost always an advantage. The main situations where you should prefer an immutable variable are for arrays and AAs or for any type or situation where the value needs to be determined at runtime or where it would be better if it were. The main problem with arrays and AAs and enums, is that you end up allocating a new one every time the enum is used, which won't happen with a variable and isn't a problem for other types of enums (as any other type which would be allocated on the heap can't be an enum). Strings are an exception with regards to arrays as string literals end up in a special place in memory rather than being duplicated, so you don't end up with an allocation every time you use it. Overall though, it's better to use enum for constants. Using a variable just creates extra overhead (minimal though it may be). - Jonathan M Davis
