我已经读过,在某些 C 标准(可能是 99?)中未定义它在修改 const 时会发生什么。但是一个学生给了我一些代码,我对其进行了修改。
我看不出常量变量的地址有什么特别之处a
。我验证了&a
并且b
是相同的,所以编译器并没有巧妙地指向其他位置。然而,当我分配时*b
,const值不会改变。
我没有运行优化。当我使用-g
标志进行编译以调试并单步执行代码时,我得到了我期望的结果(变量的内存位置发生了a
变化)。然而,下面显示的代码并未反映a
.
即使在调试模式下,临时工现在也被放置在寄存器中,没有优化?
#include <iostream>
using namespace std;
int main(){
const int a = 15;
cout << a << '\n';
int * b= (int*)&a;
cout << &a << "\n";
cout << b << "\n";
*b = 20;
cout << *b << '\n';
cout << a << '\n';
int x = a;
cout << x << '\n';
x = *b;
cout << x << '\n';
return 1;
}