this 指针

看下面这段代码:


class Date
{
public:

	void Init(int year, int month, int day) //这个函数看起来有3个参数,但是实际上是4个
	{
		_year = year;
		_month = month;
		_day = day;
	}

	void Print() //这个函数看起来没有参数,但是实际上有1个参数
	{
		cout << _year << "/" << _month << "/" << _day << endl;
	}

private:
	int _year;
	int _month;
	int _day;
};
int main()
{

	Date d1;
	d1.Init(2023, 7, 20); //函数的调用

	Date d2;
	d2.Init(2023, 7, 20); //函数的调用

	return 0;
}

那还有一个参数咋不显示出来呢?那个参数是啥呢?
这个参数是一个隐含的参数,是一个指针,叫this指针。
所以,上面的函数的实际情况是这样的:
void Init(Date* this, int year, int month, int day)
多了一个:Date* this , 这个是编译器加上去的。
上面的函数在编译器编译时会被编译器改成这样:

void Init(Date* this, int year, int month, int day)
{
	this->_year = year;
	this->_month = month;
	this->_day = day;
}

主函数中相关函数的调用也会被编译器改一下,变成下面这样:

d1.Init(&d1, 2023, 7, 20); 
d1.Init(&d1, 2023, 7, 20); 

多加了个&d 上去。
问题?:this指针是存放在哪里的?
栈? 堆? 静态区? 常量区?

this指针是一个形参,一般是存在栈帧里面的

你可能感兴趣的:(c++)