我正在通过访问内存位置来更改const变量的值.为什么不起作用?

Sea*_*hot 2 c++ const

我试图理解c ++中的const.我在下面的代码片段中写了这个:

const int x=5;
int *ptr;
ptr=(int*)&x;
cout<<"address of x="<<&x<<endl;
cout<<"value of ptr="<<ptr<<endl;
*ptr=11;
cout<<"*ptr="<<*ptr<<endl;
cout<<"x="<<x;
Run Code Online (Sandbox Code Playgroud)

输出是

address of x=0x28fef8
address of ptr=0x28fef8
*ptr=11
x=5
Run Code Online (Sandbox Code Playgroud)

由于ptr指向x,我确信*ptr和x的值是相同的.为什么价值不同?我知道x是const,但是,我通过执行*ptr来改变内存地址的值.请告诉我我错过了什么.

pmr*_*pmr 6

您的C样式转换正在删除常量,使分配成为可能.之后,您将写入声明的值const.这会调用未定义的行为,然后一切都会发生.这也意味着无法解释您所看到的输出.很可能编译器假设值永远不会改变,只是使用常量折叠,因此你得到了x=5,但我们永远不会确定.

外卖:C风格的演员是邪恶的,几乎从不需要.