У Consts действительно нет адреса, они вообще не могут быть сохранены. Давайте посмотрим на эту небольшую программу и посмотреть, что происходит в его промежуточном источнике C код:
const x = 10
echo x
echo x + 1
Соответствующий код C выглядит следующим образом:
STRING_LITERAL(TMP5, "10", 2);
STRING_LITERAL(TMP6, "11", 2);
NIM_EXTERNC N_NOINLINE(void, xInit)(void) {
printf("%s\012", ((NimStringDesc*) &TMP5)? (((NimStringDesc*) &TMP5))->data:"nil");
printf("%s\012", ((NimStringDesc*) &TMP6)? (((NimStringDesc*) &TMP6))->data:"nil");
}
Таким образом, расчет на самом деле сделано во время компиляции и конечные строки для echo
хранятся в программе вместо int x
.
Спасибо, хорошее объяснение. Что делать, если я хочу получить адрес из 'let var'? – Arrrrrrr
@Arrrrrrr: Это именно то, что мне было интересно некоторое время, [приводя к следующему вопросу] (http://stackoverflow.com/q/30132599/1804173). – bluenote10
Спасибо за ваше уведомление @ bluenote10 – Arrrrrrr