在下面的代码中,我期望将变量x
放在只读存储器中,因此我们通过非常量指针/引用对其执行的操作均无效,在这种情况下,{ {1}}等于0或关键字*y
仅用于编译时检查,我们可以在运行时执行所需的任何操作,在这种情况下,const
和x
应该等于20。但是我得到的是*y
等于0,x
等于20(似乎*y
并不指向y
! !)
x
答案 0 :(得分:2)
一个由优化引起的问题的很好的例子,以及为什么要小心使用类似的东西。 关键字const的主要目的是告诉编译器该值不会更改,并且编译器可以(但不是必须)对其进行优化。仅放置一个使用值20的汇编指令而不是去内存并获取实际值,这样效率更高,而这正是编译器所做的。因为您允许。编译器没有义务遵循指针并实际检查您所做的修改。所以这是您在此处未定义的行为,这就是const的工作方式。