byKeyValue is not available at compilation-time right ?
Mike Parker
aldacron at gmail.com
Mon Jul 26 09:38:44 UTC 2021
On Sunday, 25 July 2021 at 17:38:23 UTC, someone wrote:
>
>> i.e. your AA initialization is copy-pasted into each use of
>> it, which means your program is rebuilding this AA at runtime
>> every time it comes up. You probably got to this point as a
>> bare `immutable structureLocations` errored out to the
>> non-constant expression.
>
> Sounds bad, inefficient at least :(
The whole point of a manifest constant is that it is purely a
compile-time entity that does not exist at runtime. It has no
address. In other words, `enum a = 10` can be seen as an alias to
the integer literal `10`. That means anywhere you use `a`, it's
just like you typed in `10` instead. It is *not* the same as a
`const` or `immutable` value.
Think of them as a way to avoid "magic literals". Instead of
typing `10` or `[1, 2, 3]` in multiple initializers or function
calls, you use an alias instead, then when you decide to use `20`
or `[2, 4, 6]` instead, you can simply change the declaration of
the manifest constant instead of at multiple locations. But
you're *still* effectively passing a literal. So if at certain
points in your code you want to avoid any allocations a literal
would trigger, then you shouldn't be using manifest constants at
those points either.
More information about the Digitalmars-d-learn
mailing list