Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Парадокс const (С++)

34K
22 ноября 2009 года
muturgan
96 / / 01.10.2009
Столкнулся с ситуацией, от которой у меня просто взрыв мозга.
Пытаюсь хакерским способом записать в переменную, объявленную как const int записать новое значение.
Код:
#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;
}


Результат работы программы вот такой:
0xbf920d7c 0 0xbf920d7c 1

То есть получается, что по одному и тому же адресу хранятся разные значения. Кто в теме, помогите пролить свет на это.
590
22 ноября 2009 года
Gigahard
223 / / 03.04.2006
Все зависит от компилятора. У меня в шестом билдере нули.
34K
22 ноября 2009 года
muturgan
96 / / 01.10.2009
компилятор g++. Но этот же код, скомпиленный в VS выдаёт 0 и 1.
5.3K
22 ноября 2009 года
!Волк
95 / / 19.07.2006
Видимо компилятор просто оптимизировал обращение к константной переменной, посчитав что оно не может измениться ни при каких условиях. То есть он явно подставил единицу везде где идет обращение к константе.
297
22 ноября 2009 года
koodeer
1.2K / / 02.05.2009
В Visual Studio выдаёт 0 и 1.
В отладчике видно, что константная переменная меняет своё значение на 0, но умный компилятор вместо *(&a) подставляет 1.[highlight=asm]push 1[/highlight]
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог