关于this指针

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值