C ++重载后缀增量运算符时得到奇怪的输出

时间:2018-11-15 11:35:17

标签: c++ operator-overloading

我将所有内容都放入一个源文件中,并上传到pastebin以便于调试。

我的问题出在后缀增量运算符上。
在我的输出中,我得到了这个信息:

DC.QUOTE.ToList()

当我期望这样的时候:

Preincrement expressions:
(-11 - 2i)
(-117 + 44i)

Postincrement expressions:
(-1.07374e+08 - 1.07374e+08i)
(-1.07374e+08 - 1.07374e+08i)

After postincrement expressions:
(-1199 - 718i)
(-922077 + 1.72176e+06i)

我收到一个奇怪的输出,关于“预增量表达式”。在调试期间,我可以看到临时对象中存储的值是正确的,直到需要格式化和输出它们为止。

在此方面的任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

只需在后缀运算符++的返回类型中删除“&”即可:

// h
Complex operator++(Complex &a, int); //Post
// cpp
Complex operator++(Complex &a, int) //Post
{
    Complex temp(a.r, a.i);
    a.cube(temp);
    return temp;
}

Postfix运算符应按值而不是引用返回对象。否则,您将返回对局部变量的引用,这是错误的做法。