const int i = 2会为i分配内存地址, 同时在编译阶段,对该值进行值替换。
int *j = const_cast<int*>(&i);
int &k = const_cast<int&>(i);
*j = 5 ;
cout << i << " " << *j << " " << k << endl; // 2 5 5
k = 7;
cout << i << " " << *j << " " << k << endl; // 2 7 7
cout << &i << " " << j << " " << &k << endl // 0018FA18 0018FA18 0018FA18
由上可以看出i的值保持不变, 指针和引用的值会发生变化, 但三者指向的地址是一样的。