gpt4 book ai didi

c++ - 使用递减运算符编写 C++ 代码时的奇怪行为

转载 作者:太空狗 更新时间:2023-10-29 20:21:33 25 4
gpt4 key购买 nike

我是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。非常感谢!

最佳答案

const INT& operator--(int) { ... }

错了。您正在返回对函数范围内对象的引用。函数返回后引用失效。将其更改为:

INT operator--(int) { ... }

同时,您不需要 const in:

const INT operator++(int) { ... }

将其更改为:

INT operator++(int) { ... }

关于c++ - 使用递减运算符编写 C++ 代码时的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43350652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com