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ù):
- 它們一個(gè)是類的成員函數(shù),一個(gè)是普通的函數(shù)
- 對(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的功能是相似的。