Изменить значение статического const int в c ++ - PullRequest
1 голос
/ 07 октября 2019

Мне нужно изменить значение члена static const int. Я знаю, что это немного странно, но мне нужно, чтобы преодолеть ограничение, заданное используемой платформой!

Я уже пробовал, но это не работает, возникает ошибка «неопределенная ссылка». в MyClass :: staticConstMember ”:

class MyClass
{
static const int staticConstMember = 10;
};
int main()
{
int* toChageValue = const_cast<int*>(&MyClass::staticConstMember);
 toChangeValue = 5;
std::cout<<MyClass::staticConstMember<<std::endl; // here I need to print 5
Return 0;
};

1 Ответ

6 голосов
/ 07 октября 2019

Вы не можете. Период. Объект, который на самом деле определен с типом данных const, является неизменным в C ++, и компиляторы знают это и используют эти знания.

Вы не можете надеяться сделать это надежно. Даже если вам как-то удастся убедить биты в памяти действительно измениться (используя UB, такой как приведенный вами код), вы никогда не сможете быть уверены, что компилятор выдаст инструкции загрузки из этой памяти вместо кэширования результата загрузки или даже жесткого кодирования. значение, которое объект const имел во время компиляции.

Не говоря уже о том, что такой объект (static const int) может находиться в той части памяти, для которой ваша программа не имеет доступа для записи. ,Выполнение такого небезопасного броска, как вы пытаетесь, приведет к сбою вашей программы с нарушением прав доступа.

Вам нужно будет найти другой способ достижения вашей действительной цели.

...