const SA sa;
cout << sa.i << endl;
SA &sb = const_cast<SA&>(sa);
sb.i = 11;
cout << sa.i << endl;
上述这种方式中对象sa是存储在内存中的,并且这个内存在系统中是可更改的,所以我们 可以利用上述这种方式来做改变。
考虑下面的实例:
const int i
= 0;
int &b = const_cast<int
&>(i);
b = 10;
cout << i << endl;
cout << b << endl;
结果将不如人所料,i输出的值还是0,b输出的值是10.这是什么原因呢?这主要是因为C++编译器中const的实现机制的问题。在C++中,const会被看成是一个常量,所以像数值,字符串这类的值,编译器都会将其放入文字常量区,这也是python中的处理方式。当声明一个引用类型的b时,编译器为他在内存中(栈,不是文字常量区)分配空间,因此是可以改变的。那么我们怎么改变i的值呢?想办法获取此时0在文字常量区的地址,将其改变会不会是一种方式呢?