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;
}
观察反汇编
发现仅仅是将对象a拷贝了一份发送到plus函数中
那么,如果结构体的成员更多呢
修改部分代码
struct person
{
int a;
int b;
int c;
};
观察反汇编
先提升堆栈,然后依旧是复制了一份到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;
}
这种方法好处在于减少内存消耗,加快运行速度
那么同样的程序把函数放在结构体里会怎么样呢
此时编译器帮我们多做了一步,它结构体的首地址传进了ecx
而我们并未写任何代码要求它做这件事,一切都是他它自动执行的
在函数中多了一部push ecx 和pop ecx
这个ecx里面的值就是this指针
this指针相当于一个常量指针,不允许重新赋值
当然你可以用这种方式*(int*)this来给他重新赋值,不过这样做很无聊
上一篇: c++ this指针学习笔记
下一篇: SpringBoot——01概念&入门