这里我举一个重载自增运算符的例子:
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;
}
我被告知不能返回局部变量。“this”不是局部变量吗?这是我的想法:
数字类型的指针附加到成员函数(重载的运算符函数)。当编译器看到 ++my_dig 行时,即 Digit 类的一个实例,它会调用成员函数。my_dig 实例的地址作为参数传递给函数,并且有一个名为“this”的隐藏“const Digit*”来捕获参数。"this" 被取消引用(隐式)以访问 m_digit,它是 Digit 类的成员变量。所有的增量或包装都在函数内部完成,然后对取消引用的“this”的引用返回给调用者。是的,这就是我困惑的地方。如果“this”是一个 const Digit* 类型的局部变量,它是否应该在返回时包含垃圾,因为“this”超出了块结束的范围 haaa?