C++ this指針機(jī)制

this 指針

class Point {
    int x;
    int y;
public:
    Point() {
        x = 0;
        y = 0;
    }
    void add() {
        x = x + 1;
        y = y + 1;
    }

};

void add2(Point & _p) {
    _p.x++;
    _p.y++;
}

int main() {
    Point p1;
//add函數(shù)和add2函數(shù)有什么區(qū)別?
    p1.add();
    add2(p1);
}

這是一個(gè)嚴(yán)肅的問題,add函數(shù)和add2函數(shù)有什么區(qū)別,哪一個(gè)效率更高?

答案:一樣的,編譯器內(nèi)部已經(jīng)成員函數(shù)(add函數(shù))轉(zhuǎn)換為了和add2相同的函數(shù)。

對(duì)于add和add2函數(shù):

  1. 它們一個(gè)是類的成員函數(shù),一個(gè)是普通的函數(shù)
  2. 對(duì)于類的成員函數(shù)add,其實(shí)在類的設(shè)計(jì)里面隱藏了this指針

也就是所,真正的add函數(shù)是

void add(Point * const  this) {
        this->x = this->x + 1;
        this->y = this->y + 1;
    }

c++的語言設(shè)計(jì)機(jī)制上隱藏掉了這一點(diǎn),但是比如python就沒有采用這樣的設(shè)計(jì),python所有的成員函數(shù)調(diào)用都是有一個(gè)self的參數(shù),這個(gè)self的功能和this的功能是相似的。

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

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

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,069評(píng)論 0 9
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,683評(píng)論 1 51
  • C++文件 例:從文件income. in中讀入收入直到文件結(jié)束,并將收入和稅金輸出到文件tax. out。 檢查...
    SeanC52111閱讀 3,103評(píng)論 0 3
  • 重新系統(tǒng)學(xué)習(xí)下C++;但是還是少了好多知識(shí)點(diǎn);socket;unix;stl;boost等; C++ 教程 | 菜...
    kakukeme閱讀 20,456評(píng)論 0 50
  • 剛看完遼寧春晚郭冬臨的小品,關(guān)于父親,關(guān)于親情。其實(shí)我很不愿意去寫這些關(guān)于親情的文字,那樣太容易觸碰內(nèi)心最柔軟的地...
    亦如是涂如是閱讀 258評(píng)論 0 0

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