14.this指针调用成员变量时,堆栈会发生什么变化?
当在类的非静态成员函数访问类的非静态成员时,编译器会自动将对象的地址传给作为隐含参数传递给函数,这个隐含参数就是this指针。
即使你并没有写this指针,编译器在链接时也会加上this的,对各成员的访问都是通过this的。
例如你建立了类的多个对象时,在调用类的成员函数时,你并不知道具体是哪个对象在调用,此时你可以通过查看this指针来查看具体是哪个对象在调用。This指针首先入栈,然后成员函数的参数从右向左进行入栈,最后函数返回地址入栈。
#include <iostream>
using namespace std;
class MyClass
{
public:
void printThis()
{
cout << "指针值: " << this << endl;
}
};
int main()
{
MyClass obj1;
MyClass obj2;
obj1.printThis();
obj2.printThis();
cout << "obj1地址: " << &obj1 << endl;
cout << "obj2地址: " << &obj2 << endl;
return 0;
}
参考:阿秀