為什么const對象只能訪問const成員函數(shù)

const對象只能訪問const成員函數(shù)

在一個(gè)對象調(diào)用其成員函數(shù)時(shí),它隱含的一個(gè)形參this指針。
例如,我們定義了一個(gè)函數(shù)CTest::ttt();實(shí)際上在編譯器中該函數(shù)的定義就是CTest::ttt(CTest *const this),該this指針?biāo)赶虻膬?nèi)容可以改變,但是該this指針不可以被改變。當(dāng)我們用CTest的一個(gè)對象test1調(diào)用ttt函數(shù)時(shí)即test1.ttt()時(shí),編譯器就會將它解釋為ttt(&test1),所以我們在ttt中使用this指針就可以改變對象test1的成員變量了。
但是,當(dāng)我們的對象是const對象時(shí),即const CTest ttt;這時(shí)候表示什么意思呢,ttt的內(nèi)容是不可以改邊的,當(dāng)我們把&ttt作為一個(gè)參數(shù)傳到形參this時(shí),矛盾出現(xiàn)了:ttt是一個(gè)常量,其成員不可以被改變;this指針的成員變量是可以改變的。如果我能正確的將ttt 的地址傳給this,那么ttt這個(gè)常量的值不是可以在this中被改變了嗎,所以,編譯器是不允許這種情況出現(xiàn)的,就提示錯(cuò)誤了。故,const對象不能訪問非const成員函數(shù)。
同理,當(dāng)我們的成員函數(shù)是const成員函數(shù)時(shí),例:CTest::ttt() const,在編譯器解釋時(shí)會將該函數(shù)解釋為CTest::ttt(const CTest * const this),this指針及其所指向的內(nèi)容都不可以被修改,前面提到的矛盾也就不存在了,所以const對象可以訪問const成員變量。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容