Maison > Questions et réponses > le corps du texte
描述你的问题
pc是一个指向i的const指针,通过const_cast我们得到了一个普通的指针p。直接输出pc,p,以及&i,输出的都是003BF800,但是输出*pc,i却有1和32两种结果,那么请问在003BF800这个地址中存放的到底是整数1还是整数32,以及为什么会出现这种现象?
贴上相关代码
#include <iostream>
using namespace std;
int main()
{
1 2 3 4 5 6 7 |
|
}
贴上报错信息
贴上相关截图
已经尝试过哪些方法仍然没解决(附上相关链接)
黄舟2017-04-17 13:26:38
在003BF800
中,保存的的确是整数1,由于p
指针已改变了其值。然而缘何i的值为32,可能因为i是个编译时可计算的常量表达式"constexpr
",在编译时已替换了相关内容。
迷茫2017-04-17 13:26:38
通过const_cast
去除const
限定符后获得的新变量,如果对应原始变量是非常量(nonconst
)类型的,则可以更改新变量。如果原始变量是常量类型的,则更改新变量是未定义的行为。具体情况由编译器决定。
题主通过指针p
改写原始变量i
是未定义行为。
PHPz2017-04-17 13:26:38
这个没什么奇怪的,编译器知道i是常量,所以输出的时候直接用了立即数来输出,你改变了原来的值根本没有用。。。
下面是g++ 4.8生成的汇编代码,一看便知。。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
|