14.this指针调用成员变量时,堆栈会发生什么变化?

发布时间 2023-08-02 22:15:09作者: CodeMagicianT

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;
}

参考:阿秀