首页 > 学院 > 开发设计 > 正文

常量函数成员奈我何

2019-11-08 01:22:15
字体:
来源:转载
供稿:网友

写在前面

在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; }

原理

把this指针的类型强制转换为CC*型就可以摆脱const的束缚,从而达到修改对象内容的目的。

题外话

这是利用系统机制实现的小技巧,在实际使用中非常不安全(破坏了封装性),只可偶尔一用,切勿滥用!


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表