enums

monarch_dodra via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri May 30 08:41:18 PDT 2014


On Friday, 30 May 2014 at 15:30:15 UTC, Russel Winder via 
Digitalmars-d-learn wrote:
> I think I have no idea what D enums are about.
>
> Bearophile's example of some code in an email on another thread 
> uses:
>
>         enum double p0 = 0.0045;
>
> Now I would have written:
>
>         immutable double p0 = 0.0045;
>
> or at the very worst:
>
>         const double p0 = 0.0045;
>
> For me, enum means create an enumerated type. Thus "enum 
> double" to
> define a single value is just a contradiction.
>
> Enlightenment required…

The keyword "enum" stems from the enum hack in C++, where you use:
enum {foo = 100}; //Or similar

As a way to declare a manifest constant known at compile time.

D simply "hijacked" the "enum" keyword to mean "manifest constant 
that is known at compile time".

Compared to an immutable instance:
* The immutable instance creates an actual reference-able object 
in your binary. The enum will not exist outside of the 
compilation (think of it as a higher order macro)
* immutable represents a value, which *may* be initialized at 
runtime. In any case, more often than not (I have observed), the 
compiler will refuse to use the immutable's value as compile-time 
known, and it won't be useable as a template parameter, or static 
if constraint.


More information about the Digitalmars-d-learn mailing list