关于C++中this的几点思考

本文深入探讨了C++中的this指针,通过实例展示了在结构体和类中this如何作为对象的引用传递。在调用成员函数时,this指针自动传递,指向调用该成员函数的对象。无论是无成员变量的结构体还是带有成员变量的类,this都代表对象的首地址。在构造函数中,this用于初始化成员变量。总结指出,this的使用是灵活的,它始终指向当前对象的内存地址。
摘要由CSDN通过智能技术生成

文章目录


C++中的this

#include<stdio.h>
struct A {
	int Sum(int x, int y) {
		return x+y;
	}
};
int main()
{
	A a;
	printf("%p\n",a);//输出000000CC
	printf("%p\n",&a);//输出栈空间中那个1字节的地址,
	printf("%d\n", sizeof(a));//输出1
	printf("%d\n", a.Sum(3, 4));
	return 0;
}

上面,我并没有定义一个类,而是采用了结构体的方式,在结构体里面定义一个函数,按道理来说结构体或类中没有成员变量,只有成员函数,其sizeof应该是0,但是这里编译器针对这种情况,在栈中给了1字节的空间给结构体,里面存放的值是0XCC。

好了,聚焦到this上面,我们看看反汇编。
反汇编
从上面反汇编看出,在调用a.Sum(3,4)的时候,两个push之后,又有一个lea ecx,[ebp-9],即通过寄存器ecx将参数传递给Sum,并且ecx值为ebp-9,就是上面说的0xCC的地址,即结构体的首地址。因此this指针的内容就是结构体的首地址。

我们在学习的时候,老师会说this就是代表你创建的对象本身,从反汇编角度this就是对象的首地址。

#include<stdio.h>
class A {
	private:
		int x;
		int y;
	public:
	A(int x,int y) {
		this->x = x;
		this->y = y;
	}
};
int main()
{
	A a(2,3);
	return 0;
}

上面的代码在构造函数里面用了this,同样的也是在把对象的首地址当做this,也可以看出构造函数调用前其实编译器已经创建了对象,只不过没有对成员变量赋值而已,但是存储空间已经给了。

总结

this的用法还是比较灵活的,这里说的也不全面,希望共同进步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值