欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C++—this指针学习笔记

程序员文章站 2022-07-12 15:38:35
...

C++—this指针学习笔记

我们先做一个关于结构体传参的实验

struct person
{
	int a;
	int b;
};
void plus(person a)
{

}
int main()
{
	person a{};
	plus(a);
	return 0;
}

观察反汇编
C++—this指针学习笔记
发现仅仅是将对象a拷贝了一份发送到plus函数中
那么,如果结构体的成员更多呢
修改部分代码

struct person
{
	int a;
	int b;
	int c;
};

观察反汇编
C++—this指针学习笔记
先提升堆栈,然后依旧是复制了一份到plus函数中,换汤不换药
由于这种直接传结构体的方式比较浪费内存,所以尽量多用结构体指针,采用偏移的方式来访问成员

struct person
{
	int a;
	int b;
	int c;
};
void plus(person* a)
{
	a->c=a->a + a->b;
}
int main()
{
	person a{};
	plus(&a);
	return 0;
}

C++—this指针学习笔记
C++—this指针学习笔记
这种方法好处在于减少内存消耗,加快运行速度
那么同样的程序把函数放在结构体里会怎么样呢
C++—this指针学习笔记
此时编译器帮我们多做了一步,它结构体的首地址传进了ecx
而我们并未写任何代码要求它做这件事,一切都是他它自动执行的
C++—this指针学习笔记
在函数中多了一部push ecx 和pop ecx
这个ecx里面的值就是this指针
this指针相当于一个常量指针,不允许重新赋值
当然你可以用这种方式*(int*)this来给他重新赋值,不过这样做很无聊

相关标签: c++ c++