gpt4 book ai didi

c++ - C++ 中的一元运算符重载特例

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

我成功地完全重载了一元 ++,-- 后缀/前缀运算符并且我的代码工作正常,但是在使用时 (++obj)++声明它返回意外的结果

这是代码

class ABC
{
public:
ABC(int k)
{
i = k;
}


ABC operator++(int )
{
return ABC(i++);
}

ABC operator++()
{
return ABC(++i);
}

int getInt()
{
return i;
}
private:
int i;
};

int main()
{
ABC obj(5);
cout<< obj.getInt() <<endl; //this will print 5

obj++;
cout<< obj.getInt() <<endl; //this will print 6 - success

++obj;
cout<< obj.getInt() <<endl; //this will print 7 - success

cout<< (++obj)++.getInt() <<endl; //this will print 8 - success

cout<< obj.getInt() <<endl; //this will print 8 - fail (should print 9)
return 1;
}

有什么解决办法或者原因吗???

最佳答案

一般情况下,预增量应返回 ABC&,而不是 ABC

您会注意到这会使您的代码无法编译。修复它相对容易(不要创建新的 ABC,只需编辑现有值,然后返回 *this)。

关于c++ - C++ 中的一元运算符重载特例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13092642/

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