一种改变const值的方式是使用const_cast类型转换符,将const变量转换为一个该变量的引用,通过这个引用去改变值,这种方法的实质就是用地址改变内存的值。如下实例:
struct SA {
int i = 0;
};
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在文字常量区的地址,将其改变会不会是一种方式呢?
时间: 2024-10-06 01:19:41