在每个成员函数中都包含一个特殊的指针,即this指针,它的名字是固定的。
this指针是指向当前对象的指针,它的值是当前被调用的成员函数所在对象的起始地址。
例1、
class Student{public: int FunTest(int a, int b) { int c = 0; c = a + b; return c; }PRivate: int age; int tel;};int main(){ int num1=3, num2=4; Student a; a.FunTest(num1,num2);//实际上是a.FunTest(&a,num1,num2) system("pause"); return 0;}此时在主函数定义了一个Student的类对象a,那么此时this指针的值就是该对象a的起始地址。this 指针是隐式使用的,它是作为参数传递给成员函数的。如果成员函数从表面上看没有参数那么实际上他有一个参数,就是this指针,如果成员函数从表面上看有一个参数那么实际上他有两个参数,就是this指针。
this指针最大作用是指向当前对象然后通过this指针去引用各成员。
这些都是编译器自动实现的,程序员不需要人为的在成员函数的参数中添加this指针
关于this 指针的类型:类类型 * const
this 指针并不是对象的一部分,因此不影响sizeof的结果。
this 指针的作用域是在非静态成员函数的内部
this 指针是类成员函数的第一个默认参数,编译器会自动传参
只有在类的非静态成员函数中才可以使用this指针,因为我们知道静态成员函数是没有this指针的
有关_thiscall的调用约定
thiscall是唯一一个不能明确指明的函数修饰,因为thiscall不是关键字。它是C++类成员函数缺省的调用约定。由于成员函数调用还有一个this指针,因此必须特殊处理,thiscall意味着:
thiscall只能用在类成员函数上
参数从右往左压栈
如果参数个数确定,this指针通过ecx寄存器传给被调用者,如果参数不确定this指针在所有参数被压栈完成之后压栈
对于参数个数不定的调用者自己清理堆栈否则函数自己清理
为什么叫做this指针而不叫引用呢
其实引用传参不用创建临时变量效率高,而用指针传参同样会创建临时变量,但是由于C++就是这么创建的先有的this之后发现用引用可以也来不及改了。
在静态成员函数中是没有this指针的。
新闻热点
疑难解答