Проблема в том, что ваша программа на C ++ может быть загружена в любой точке памяти, и поэтому глобальный адрес var
может отличаться при каждом запуске программы.Что произойдет, если вы запустите свою программу дважды?var
, очевидно, находится в двух разных местах.
Еще хуже, в вашем примере вы берете адрес переменной в стеке!посмотрите на это:
void myfunction( unsigned int depth) {
const int myvar = depth;
const int * const myptr = &myvar;
if (depth)
myfunction(depth-1);
}
Если main вызывает myfunction (3), то 3 myvars создаются в отдельных местах.Для времени компиляции нет никакого способа даже узнать, как много myvars создано, тем более там, где есть точные местоположения.
Наконец: объявление переменной const
означает: "Я обещаю"и не означает, что это постоянная времени компиляции.Смотрите этот пример:
int main(int argc, char** argv) {
const int cargc = argc;
char* myargs[cargc]; //the size is constant, but not a _compile time_ constant.
}