首页 > 学院 > 开发设计 > 正文

关于this指针

2019-11-08 19:24:46
字体:
来源:转载
供稿:网友

在每个成员函数中都包含一个特殊的指针,即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指针的。


上一篇:PAT甲级1120

下一篇:1003. Emergency (25)

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表