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函数和add2函数有什么区别?
p1.add();
add2(p1);
}
这是一个严肃的问题,add函数和add2函数有什么区别,哪一个效率更高?
答案:一样的,编译器内部已经成员函数(add函数)转换为了和add2相同的函数。
对于add和add2函数:
- 它们一个是类的成员函数,一个是普通的函数
- 对于类的成员函数add,其实在类的设计里面隐藏了this指针
也就是所,真正的add函数是
void add(Point * const this) {
this->x = this->x + 1;
this->y = this->y + 1;
}
c++的语言设计机制上隐藏掉了这一点,但是比如python就没有采用这样的设计,python所有的成员函数调用都是有一个self的参数,这个self的功能和this的功能是相似的。