#include <iostream>
using std::cout;
int main()
{
const int a = 1;
unsigned int temp = reinterpret_cast<unsigned int>(&a);
int* ptr_a = reinterpret_cast<int*>(temp);
*ptr_a = 0;
cout << ptr_a << " "<< *ptr_a << " " << &a << " " << *(&a) << "\n";
return 0;
}
Парадокс const (С++)
Пытаюсь хакерским способом записать в переменную, объявленную как const int записать новое значение.
Код:
Результат работы программы вот такой:
0xbf920d7c 0 0xbf920d7c 1
То есть получается, что по одному и тому же адресу хранятся разные значения. Кто в теме, помогите пролить свет на это.
Все зависит от компилятора. У меня в шестом билдере нули.
компилятор g++. Но этот же код, скомпиленный в VS выдаёт 0 и 1.
Видимо компилятор просто оптимизировал обращение к константной переменной, посчитав что оно не может измениться ни при каких условиях. То есть он явно подставил единицу везде где идет обращение к константе.
В отладчике видно, что константная переменная меняет своё значение на 0, но умный компилятор вместо *(&a) подставляет 1.[highlight=asm]push 1[/highlight]