我试图理解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来改变内存地址的值.请告诉我我错过了什么.
您的C样式转换正在删除常量,使分配成为可能.之后,您将写入声明的值const.这会调用未定义的行为,然后一切都会发生.这也意味着无法解释您所看到的输出.很可能编译器假设值永远不会改变,只是使用常量折叠,因此你得到了x=5,但我们永远不会确定.
外卖:C风格的演员是邪恶的,几乎从不需要.