指向常量的奇怪行为

时间:2019-02-08 06:14:16

标签: c++

在下面的代码中,我期望将变量x放在只读存储器中,因此我们通过非常量指针/引用对其执行的操作均无效,在这种情况下,{ {1}}等于0或关键字*y仅用于编译时检查,我们可以在运行时执行所需的任何操作,在这种情况下,constx应该等于20。但是我得到的是*y等于0,x等于20(似乎*y并不指向y! !)

x

1 个答案:

答案 0 :(得分:2)

一个由优化引起的问题的很好的例子,以及为什么要小心使用类似的东西。 关键字const的主要目的是告诉编译器该值不会更改,并且编译器可以(但不是必须)对其进行优化。仅放置一个使用值20的汇编指令而不是去内存并获取实际值,这样效率更高,而这正是编译器所做的。因为您允许。编译器没有义务遵循指针并实际检查您所做的修改。所以这是您在此处未定义的行为,这就是const的工作方式。