我是c ++的初学者,我在编码时遇到一个奇怪的代码,下面是问题。
class INT
{
friend ostream& operator<<(ostream& os, const INT &i);
public:
INT(int i) :m_i(i){};
INT(const INT& i)
{
m_i = i.m_i;
}
INT& operator++()
{
++(this->m_i);
return *this;
}
const INT operator++(int)
{
INT temp = *this;
++(*this);
return temp;
}
INT& operator--()
{
--(this->m_i);
return *this;
}
const INT& operator--(int)
{
INT temp = *this;
--(*this);
return temp;
}
int& operator*() const
{
return (int&)m_i;
}
private:
int m_i;
};
ostream& operator<<(ostream& os, const INT &i)
{
os << "[" <<i.m_i<< "]";
return os;
}
int main(int argc, char* argv[])
{
INT i(5);
cout << i++;
cout << ++i;
cout << (i--);
cout << --i;
cout << *i;
}
我得到了一个结果
[5][7][-858993460][5]5
我的预期结果是
[5][7][7][5]5
我正在使用Visual Studio 2013.非常感谢!
答案 0 :(得分:6)
const INT& operator--(int) { ... }
错了。您将返回对函数范围中的对象的引用。函数返回后引用变为无效。将其更改为:
INT operator--(int) { ... }
在此期间,您不需要const
in:
const INT operator++(int) { ... }
将其更改为:
INT operator++(int) { ... }