this指针

Q:啥是this指针?

A: C++编译器给每个“成员函数“增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有成员变量的操作,都是通过该指针去访 问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。

Q:this指针占不占大小?

A:不占,因为是由编译器帮我们加的,帮我们传递的

Q:this指针的地址里面放了啥?

A:类的对象的首地址,请看下面的代码,自行运行

#include<iostream>
using namespace std;

class A{
public:
    void get_this_address()
    {
        cout<<this<<endl;
    }
private:
};

int main()
{
    A a;
    cout<<&a<<endl;
    return 0;
}

Q:why静态成员函数没办法操作this指针?

A:静态成员函数先于对象存在,而this是对象的首地址,所以没办法操作this,同时我们知道非静态成员函数的参数中是有this的,this是非静态成员函数的一个隐藏的参数(hidden parameter)。

补充:this永远指向当前对象、可以解决命名冲突、*this指向对象的本体、非静态成员函数才有this指针

this指针只能在“成员函数”的内部使用

this指针的本质是一个成员函数的形参,是对象调用成员函数时,将对象地址作为实参传递给this形参。所以对象这种不存储this指针

this指针是成员函数第一个隐含的指针形参,一般情况由编译器ecx寄存器自动传递,不需要用户传递

lionの金库