Я пробовал выполнить следующую программу.C++ const_cast не удаляет константу переменной
#include<iostream>
using namespace std;
int main()
{
const int a = 0;
cout << &a <<endl;
int* ptr = const_cast<int*>(&a);
*ptr = 2;
cout << ptr <<endl;
cout << *ptr <<endl;
cout << a <<endl;
return 0;
}
Выход был:
0xbf92ebd8
0xbf92ebd8
2
0
Из того, что я знаю, const_cast делает изменяемые, так что он может быть изменен. Изменение отражается, когда я показываю * ptr, но изменение не отражается в a. Может ли кто-нибудь объяснить?
EDIT: Спасибо за все ответы. Я понимаю, что я наблюдаю неопределенное поведение. И я изначально путался между mutable и * const_cast *. Но тогда, не могли бы вы рассказать мне, для чего все сценарии, мы используем const_cast?
AFAIR, изменяя константные переменные, считается неопределенным поведением. Вы можете ожидать, что что-то произойдет. – Spook
Это неопределенное поведение. 'a' действительно const, поэтому вы не можете отбросить константу, не вызывая UB. – juanchopanza
Компилятор, скорее всего, оптимизирует все экземпляры 'a' до фактического значения. –