Echa un vistazo a esta cita de here, hacia la parte inferior de la página. (Creo que el comentario citado sobre const
s aplican a invariant
s también)const vs enum en D
enumeraciones difieren de consts en cuanto a que no consumen ningún espacio en la final de objeto/biblioteca/ejecutable emitida, mientras que consts hacen.
Así que al parecer value1
se hinchan el ejecutable, mientras value2
se trata como un literal y no aparece en el archivo de objeto.
const int value1 = 0xBAD;
enum int value2 = 42;
De nuevo en C++ que siempre supone que esto era por razones de compatibilidad, y compiladores antiguos que no podrían optimizar distancia constantes. Pero si esto sigue siendo cierto en D, debe haber una razón más profunda detrás de esto. Alguien sabe por qué?
Pero ese deseo asume que el compilador siempre tiene toda la fuente relevante. – larsivi
¿Qué sucede si desea otorgar acceso a bibliotecas de terceros a esa variable const? ¿Qué pasa si se trata de una instancia de clase completa que se ha hecho const? – Marenz
Nota: dije "compilador/* enlazador *". Además, D tiene que ser capaz de ver el valor de la variable en tiempo de compilación de todos modos (para plegado constante y otras cosas), por lo que hay incluso menos sentido en almacenarla físicamente en alguna parte, en cualquier situación donde sea necesaria _necesita_ la fuente disponible de todos modos. (No conozco ningún compilador que desmonte internamente el código de objeto de una ejecución anterior) – FeepingCreature