use*_*471 3 c++ this this-pointer
这里我举一个重载增量运算符的例子:
class Digit
{
int m_digit;
public:
Digit (int value) //constructor
{
m_digit = value;
}
Digit& operator++();
int ret_dig (){return m_digit;}
};
Digit& Digit::operator++()
{
if (m_digit == 9)
m_digit = 0;
else ++m_digit;
return *this;
}
int main ()
{
Digit my_dig (5);
++my_dig;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我被告知无法返回局部变量."这个"不是局部变量吗?这是我的想法:
Digit类型的指针附加到成员函数(重载操作符函数).当编译器看到行++ my_dig(即Digit类的实例)时,它会调用成员函数.实例my_dig的地址作为参数传递给函数,并且有一个名为"this"的隐藏"const Digit*"来捕获参数."this"被解除引用(隐式)访问m_digit,这是类Digit的成员变量.所有增量或包装都在函数内部完成,然后对解除引用的"this"的引用返回给调用者.是的,这是我的困惑.如果"this"是const数字*类型的局部变量,返回时它不应该包含垃圾,因为"this"超出了块结束haaa的范围吗?
this是指向对象本身的所有成员函数的隐式参数 - 它具有比方法严格更长的生命周期.参数本身是一个局部变量,但它指向的对象存在于方法之外.
在这种情况下,对象在main函数的第一行创建,然后一直存在,直到main方法退出.因此,整个呼叫过程中对象安全地活着operator++!