【发布时间】:2013-06-11 07:26:05
【问题描述】:
下面几行的结果应该是什么?
const int ci=10;
int * ip=(int *)&ci;
(*ip)=90;
我们有两条规则,常量不能改变,直接使用 * 操作符改变一部分内存必须改变那部分内存的内容。 但是当我尝试打印这些变量时,我会遇到这样的事情:
cout<<ci<<' '<<(*ip)<<endl;
// output: 10 90
我们该如何解释呢?
【问题讨论】:
-
修改常量对象是未定义的行为。我相信我会找到一个重复的帖子。
-
稍微解释一下 jogojapan 的评论 - 未定义的行为意味着任何事情都可能发生,包括您刚刚看到的。
-
@Barmar 谢谢。我现在也添加了指向 C++ 副本的链接。