3
我是C++的初学者,编码时遇到一个奇怪的代码,下面是问题。使用递减运算符编写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年。非常感谢您!
任何想法,为什么它没有失败对于返回'INT&'的'++'运算符也是如此。因为他们都是UB,所以只是愚蠢的运气? – Barmar
@Barmar OP的帖子中的'++'操作符返回一个'const INT',而不是'const INT&' –
@king_nak对,我看的是错误的。 – Barmar