enums

Andrej Mitrovic via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat May 31 06:33:17 PDT 2014


This has been asked so many times, is this info not on the website? We
should have an article on the site explaining this in depth. OT: Sorry for
top-quoting and over-quoting.

On Friday, May 30, 2014, monarch_dodra via Digitalmars-d-learn <
digitalmars-d-learn at puremagic.com> wrote:
> 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.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/digitalmars-d-learn/attachments/20140531/10708a5d/attachment.html>


More information about the Digitalmars-d-learn mailing list