常量函數成員奈我何

寫在前面

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的束縛,從而達到修改對象內容的目的。

題外話

這是利用系統機制實現的小技巧,在實際使用中非常不安全(破壞了封裝性),只可偶爾一用,切勿濫用!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章