2015-11-19 2 views
-2
#include<iostream> 
using namespace std; 

int main() 
{ 
    const float PIE=3.1415926535; 

    float *pie=const_cast<float*>(&PIE); 

    *pie=7.9; 
    cout<<"float:"<<PIE<<endl; 
    return 0; 
} 

Так что я хочу здесь сделать это, чтобы изменить const PIE, наведя его адрес в указатель не const, а затем изменит PIE через этот указатель. Я не знаю, почему он не работает, или я не так здесь?Изменение константного идентификатора в C++

ответ

1

«Попытка изменить объект const во время его жизни приводит к неопределенному поведению». Это может быть сбой программы (попытка изменения памяти только для чтения), неожиданные результаты или вообще никакого эффекта. В этом случае значение константы PIE, вероятно, выводится напрямую (а не через переменную) при компиляции, поэтому ваша попытка изменить значение не работает.

+0

Спасибо за ответ. позвольте мне сказать об одном здесь. Во время компиляции программы не будет выделено хранилище для переменной const, которая будет определена ... Она просто будет помещена в список, созданный компилятором как макросы. В моем случае я пытаюсь получить адрес этой постоянной переменной .... Так вот где компилятор будет выделять некоторое хранилище для этой переменной. И это неопределенное поведение действительно .... Итак, что вы подразумеваете под «прямо»? прямо откуда? Вы хотите сказать прямо из списка, который был создан компилятором для определенных постоянных переменных? –

+0

@Ankitsinghkushwah Для констант родных типов (int, float и т. Д.) Компилятор часто не выделяет конкретное хранилище для значения, но использует значение непосредственно в коде (именно поэтому вы можете использовать значения 'const int' как размеры массива или в деловые заявления). Поскольку вы берете адрес постоянной переменной, компилятор должен будет выделить для него некоторое хранилище, но это хранилище может находиться в разделе памяти только для чтения. «Прямо» я имел в виду, что компилятор будет передавать «3.1415926535» в 'cout', а не значение' PIE'. – 1201ProgramAlarm

Смежные вопросы