将const int转换为指针?

ipk*_*iss 0 c++ pointers casting

可能重复:
通过非const指针修改const

我有以下代码:

const int x = 5;
int *p = (int*)&x;

*p = 2; // Line 1

cout << x << " - " << *p << endl;
cout << &x << " - " << p << endl;
Run Code Online (Sandbox Code Playgroud)

并得到了结果:

5 - 2
0012FF28 - 0012FF28
Run Code Online (Sandbox Code Playgroud)

我知道代码很奇怪,不应该这样做.但我想知道为什么相同的地址但得到不同的结果?哪个Line 1商店2号?

Alo*_*ave 10

因为const无论如何改变固有变量的值是Undefined Behavior [Ref#1].

一旦你这样做了:

*p = 2; // Line 1
Run Code Online (Sandbox Code Playgroud)

所有的赌注都是关闭的,你的代码不再是有效的C++代码.一旦写完这一行,就不能指望任何特定的行为.推测为什么未定义的行为给出任何特定的行为是没有意义的,因为它允许显示任何行为[Ref#2],这是未定义行为的含义.


[参考#1]
C++ 03标准7.1.5.1简历:
第4段:

除了可以修改声明为mutable(7.1.1)的任何类成员之外,任何在其生命周期内修改const对象的尝试(3.8)都会导致未定义的行为.

[参考文献2]
C++ 03标准1.3.24:

允许的未定义行为包括完全忽略不可预测的结果,在翻译或程序执行期间以环境特征(有或没有发出诊断消息)的特定行为,终止翻译或执行(发布时)一条诊断信息).