Меня спросили, как можно изменить значение константной переменной.
Мой очевидный ответ был "указатели!" но я попробовал следующий фрагмент кода и озадачен ...
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
]