Каков результат использования ссылочного оператора «&» для константных переменных?

Меня спросили, как можно изменить значение константной переменной.

Мой очевидный ответ был "указатели!" но я попробовал следующий фрагмент кода и озадачен ...

int main()
{
    const int x = 5;
    int *ptr = (int *)(&x); // "Cast away" the const-ness..
    cout << "Value at " << ptr << ":"<< (*ptr) <<endl;
    *ptr = 6;
    cout << "Now the value of "<< ptr << " is: " << (*ptr) <<endl;
    cout << "But the value of x is still " << x <<endl;
    return 0;
}

И результат был:

Value at <some address> :5
Now the value of <same address> is: 6
But the value of x is still 5

Я не совсем уверен, что возвращается от '& x', но это определенно не реальный адрес x, поскольку значение x не изменилось!

Но, с другой стороны, ptr содержал ли значение x в начале! Итак, что именно?

EDIT скомпилировано с VS2010

]
7
задан Makoto 18 October 2013 в 04:44
поделиться