写在前面
在C++中的常量函数中我们知道,常量函数会禁止写入和修改外部数据,举个例子:
class CC{
int me;
public:
int readme const { return me; }// 常量成员函数
//void writeme(int i) const { me = i; }// 不能修改其他数据
};
原理
系统实现这一常量型函数成员禁止写入和修改对象内容的功能是通过把常量型函数成员中隐含的this指针说明为
const CC *const this
来实现的,其中后面的const指出this的内容不变(总是指向该对象),前面的const则指出*this不可改变(详见const与指针)
因此,如果要对对象内容进行修改时,我们可以通过强制转换来实现,即将
void writeme(int i) const { me = i; }
改成下面的样子即可:
void writeme(int i) const { ((CC*)this)->me = i; }